Нормальные формы баз данных
Напомним, нормализация (ссылка) — (ссылка) организация данных в таблицах БД так, чтобы:
- устранить избыточность данных (уменьшается объем хранения, ниже риск рассинхронизации и проще управление)
- улучшить целостность данных (поддерживаются правильные связи, меньше ошибок)
- уменьшить их дублирование (оптимизация структуры, лучшая производительность)
Процесс нормализации
Таблицы делятся на мелкие, связанные по смыслу, а между ними создаются связи.
Происходит шаг за шагом. В результате БД приводится к нормальным формам (NF)
Нормальные формы (NF) – требование к структуре таблиц реляционных БД
- Чем выше NF, тем меньше лишних и зависимых данных -> БД работает быстрее и точнее, но усложняется её структура
- БД считается нормализованной после достижения третьей нормальной формы. NF выше третьей нужны для устранения более сложных зависимостей
- Чтобы таблица была в нужной NF, она сначала должна соответствовать всем предыдущим формам.
Первая нормальная форма (1NF)
Требования:
- каждое поле должно содержать атомарные значения (неделимые на части)
- отсутствие повторяющихся гру пп данных
Пример:
- до: таблица с полем "телефоны", где у одного человека несколько телефонов в одной ячейке
- после: каждый телефон записан в отдельной строке
Вторая нормальная форма (2NF)
Частичные зависимости разделяются на новые таблицы.
- Все столбцы должны зависеть полностью от первичного ключа, а не только от его части (если первичный ключ состоит из нескольких полей)
Пример:
- до: в таблице заказов хранятся поля "имя клиента", "адрес клиента" и "ID заказа". Эти данные повторяются для каждого заказа клиента, что приводит к избыточности.
- после: эти данные выносятся в отдельную таблицу "клиенты", чтобы убрать дублирование в каждом заказе одного клиента
Третья нормальная форма (3NF)
- Все столбцы зависят только от первичного ключа (т.е. устранение транзитивных зависимостей: когда второй атрибут зависит от первого, а третий — от второго)
Пример:
- до: в таблице товаров есть поле "город" и "почтовый индекс". "почтовый индекс" зависит от "города", а не от товара.
- после: данные разделяются: "город" и "почтовый индекс" в отдельную таблицу адресов, а "товар" — в другую
Нормальная форма Бойса-Кода (BCNF)
Нормальная форма Бойса-Кода (BCNF) — более строгая версия 3NF, решает некоторые её недостатки
- Каждый атрибут, от которого зависят другие поля в таблице, однозначно идентифицирует запись (был кандидатным ключом)