17.4. 1НФ

Процесс нормализации сводится к последовательному приведению структуры данных к нормальным формам – формализованным требованиям к организации данным.

Нормальные формы изменяются в порядке от первой (1НФ) до пятой (5НФ). Каждая последующая форма удовлетворяет требования предыдущей. На практике обычно ограничиваются приведением данных к 3НФ.

Отношение находится в первой нормальной форме (1НФ) тогда и только тогда, когда все атрибуты содержат только атомарные значения.

Если значения атомарные, то на пересечении столбца и строки всегда находится только одно значение, а не набор значений.

Особенности 1НФ:

  1. каждое отношение имеет первичный ключ,

  2. повторяющиеся группы данных выделены в самостоятельные отношения.

Однако отношение которое находится только в 1НФ обладает не совсем желательной структурой. Пусть информация о поставщиках и поставках находитcя в отношении FIRST (S#, STATUS, CITY, P#, QTY) PRIMARY KEY (S#, P#).

ФЗ отношения FIRST:

Нарушения 3НФ:

  1. неключевые атрибуты не все взаимно независимы, так STATUS зависит от CITY,

  2. не полностью зависят от первичного ключа, STATUS и CITY каждый в отдельности зависит от только части первичного ключа – S#, а не от полного первичного ключа – S#,P#

Избыточность в FIRST приводит к аномалиям обновления, т.е. к проблемам привыполнении операций типа вставка, удаление и обновления.

INSERT: нельзя вставить данные о том, что некоторый поставщик находится в некотором городе, не указывая хотя бы один товар, поставляемый этим поставщиком.

DELETE: если удалить только один кортеж для некоторого поставщика, при этом будет удалена не только информация о поставке товара некоторым поставщиком, но и информация о том, что этот поставщик находится в некотором городе. Так при удалении кортежа S3-P2 будет утрачена информация, что поставщик S3 находится в Красноярске.

UPDATE: название города повторяется много раз. И при изменении города поставщика S1 на Норильск, то возникает проблема с поиском всех кортежей в которых соединены S1 и Енисейск для замены.

Проблема в том, что FIRST содержит много совместной информации, которую необходимо разделить на части – информацию о поставщиках в одном отношении, а о поставках – в другом.

Таким образом процедуру нормализации можно характеризовать как процедуру разбиения логически несвязанной информации по отдельным отношениям.

Для решения проблем заменяем FIRST двумя отношениями:

SECOND (первичный ключ S#) и SP (составной первичный ключ S#, P#).

Переработанная таким образом структура позволяет преодолеть перечисленные ранее проблемы:

INSERT. можно вставить данные о том, что некоторый поставщик находится в некотором городе, не указывая хотя бы один товар, поставляемый этим поставщиком.

DELETE: можно удалить информацию о поставке, при этом информация о городе поставщика сохраняется.

UPDATE.: название города появляется один раз. Можно раз и навсегда изменять название города поставщика.