Процесс нормализации сводится к последовательному приведению структуры данных к нормальным формам – формализованным требованиям к организации данным.
Нормальные формы изменяются в порядке от первой (1НФ) до пятой (5НФ). Каждая последующая форма удовлетворяет требования предыдущей. На практике обычно ограничиваются приведением данных к 3НФ.
Отношение находится в первой нормальной форме (1НФ) тогда и только тогда, когда все атрибуты содержат только атомарные значения.
Если значения атомарные, то на пересечении столбца и строки всегда находится только одно значение, а не набор значений.
Особенности 1НФ:
каждое отношение имеет первичный ключ,
повторяющиеся группы данных выделены в самостоятельные отношения.
Однако отношение которое находится только в 1НФ обладает не совсем желательной структурой. Пусть информация о поставщиках и поставках находитcя в отношении FIRST (S#, STATUS, CITY, P#, QTY) PRIMARY KEY (S#, P#).
ФЗ отношения FIRST:
S# – CITY (в кортежах с одинаковым значением номера поставщика совпадают и города).
S#,P# – QTY (в кортежах с одинаковой комбинацией номера поставщика и номера товара совпадает и количество).
CITY – STATUS (в кортежах с одинаковым городом совпадает и статус).
Нарушения 3НФ:
неключевые атрибуты не все взаимно независимы, так STATUS зависит от CITY,
не полностью зависят от первичного ключа, STATUS и CITY каждый в отдельности зависит от только части первичного ключа – S#, а не от полного первичного ключа – S#,P#
Избыточность в FIRST приводит к аномалиям обновления, т.е. к проблемам привыполнении операций типа вставка, удаление и обновления.
INSERT: нельзя вставить данные о том, что некоторый поставщик находится в некотором городе, не указывая хотя бы один товар, поставляемый этим поставщиком.
DELETE: если удалить только один кортеж для некоторого поставщика, при этом будет удалена не только информация о поставке товара некоторым поставщиком, но и информация о том, что этот поставщик находится в некотором городе. Так при удалении кортежа S3-P2 будет утрачена информация, что поставщик S3 находится в Красноярске.
UPDATE: название города повторяется много раз. И при изменении города поставщика S1 на Норильск, то возникает проблема с поиском всех кортежей в которых соединены S1 и Енисейск для замены.
Проблема в том, что FIRST содержит много совместной информации, которую необходимо разделить на части – информацию о поставщиках в одном отношении, а о поставках – в другом.
Таким образом процедуру нормализации можно характеризовать как процедуру разбиения логически несвязанной информации по отдельным отношениям.
Для решения проблем заменяем FIRST двумя отношениями:
SECOND (первичный ключ S#) и SP (составной первичный ключ S#, P#).
Переработанная таким образом структура позволяет преодолеть перечисленные ранее проблемы:
INSERT. можно вставить данные о том, что некоторый поставщик находится в некотором городе, не указывая хотя бы один товар, поставляемый этим поставщиком.
DELETE: можно удалить информацию о поставке, при этом информация о городе поставщика сохраняется.
UPDATE.: название города появляется один раз. Можно раз и навсегда изменять название города поставщика.