Нормализация и нормальные формы (1NF, 2NF, 3NF) – простое объяснение
Коротко: Нормализация разбивает таблицы так, чтобы каждая информация хранилась только один раз; это предотвращает избыточность и ошибки при изменении, вставке и удалении.
Подробнее: Плохо спроектированная таблица хранит одни и те же данные несколько раз. Если значение меняется, его нужно исправить везде, иначе возникают противоречия (аномалии). Нормальные формы — правила, предотвращающие это. Это классика экзамена IHK.
Подробности
Пример ненормализованной таблицы
Order(orderno, date, customer, customercity, item1, price1, item2, price2)
Проблемы: несколько позиций в столбцах (сколько их?), данные клиента повторяются в каждом заказе, цены дублируются. Если клиент меняет город, нужно изменить все строки.
Первая нормальная форма (1NF)
Каждая ячейка содержит ровно одно значение (атомарное), нет повторяющихся групп (item1, item2), есть первичный ключ.
→ Столбцы позиций становятся несколькими строками: OrderLine(orderno, lineno, item, price, quantity).
Вторая нормальная форма (2NF)
Дополнительно: каждый неключевой атрибут зависит от всего ключа, а не только от его части. Касается таблиц с составным ключом (orderno + item): если price зависит только от item, он принадлежит отдельной таблице Item(itemno, description, price).
Третья нормальная форма (3NF)
Дополнительно: нет транзитивных зависимостей: неключевые атрибуты зависят непосредственно от ключа, а не через другой неключевой атрибут. Если customercity зависит от customer, а customer от orderno, данные клиента принадлежат отдельной таблице Customer(customerno, name, city); Order ссылается на неё через внешний ключ.
Мнемоника: «Атрибуты зависят от ключа, от всего ключа и ни от чего, кроме ключа».
Результат и практика
Customer(customerno, name, city)
Order(orderno, date, customerno→Customer)
Item(itemno, description, price)
OrderLine(orderno→Order, lineno, itemno→Item, quantity)
Преимущества: нет избыточности, согласованные изменения, меньше хранилища. Недостаток: больше соединений. Поэтому иногда применяют сознательную денормализацию (производительность, анализ, хранилище данных). Дальнейшие нормальные формы (BCNF, 4NF, 5NF) рассматривают особые случаи. Хорошие модели данных получаются с помощью ER-модели, которая затем преобразуется в таблицы.
См. также: ER-модель