Skip to content

БД6. Нормализация отношений. Первая, вторая и третья нормальные формы. Нормальная форма Бойса Кодда.

Winterpuma edited this page Jul 5, 2021 · 2 revisions

Теория нормальных форм

Процесс нормализации заключается в разложении (декомпозиции) исходных отношений БД на более простые отношения. Каждая ступень этого процесса приводит схему отношений в последовательные нормальные формы. Для каждой ступени нормализации имеются наборы ограничений, которым должны удовлетворять отношения БД.

1NF - первая нормальная форма

Простой атрибут - атрибут, значения которого атомарны (неделимы).

Сложный атрибут - получается соединением нескольких атомарных атрибутов, которые могут быть определены на одном или разных доменах. (его также называют вектор или агрегат данных).

Отношение находится в 1NF если значения всех его атрибутов атомарны.

Алгоритм нормализации описан следующим образом:

  1. Начиная с отношения, находящегося на верху дерева, берется его первичный ключ, и каждое непосредственно подчиненное отношение расширяется путем вставки домена или комбинации доменов этого первичного ключа.
  2. Первичный Ключ каждого расширенного таким образом отношения состоит из Первичного Ключа, который был у этого отношения до расширения и добавленного Первичного Ключа родительского отношения.
  3. После этого из родительского отношения вычеркиваются все непростые домены, удаляется верхний узел дерева, и эта же процедура повторяется для каждого из оставшихся поддеревьев.

2NF - вторая нормальная форма

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

Неключевой атрибут функционально полно зависит от составного ключа если он функционально зависит от всего ключа в целом, но не находится в функциональной зависимости от какого-либо из входящих в него атрибутов.

Пример приведения в 2НФ:

ПОСТАВКИ (N_ПОСТАВЩИКА, ТОВАР, ЦЕНА).
* Пусть все поставщики поставляют товар по одной и той же цене, тогда:
(функциональные зависимости: N_поставщика, товар -> цена; товар -> цена)  

Аномалия: при изменении цены товара необходим полный просмотр отношения для того, чтобы изменить все записи о его поставщиках (т.к. в одной структуре данных объединены два семантических факта).

Разложение во 2НФ:

ПОСТАВКИ (N_ПОСТАВЩИКА, ТОВАР)
ЦЕНА_ТОВАРА (ТОВАР, ЦЕНА)

3NF - третья нормальная форма

Пусть X, Y, Z - три атрибута некоторого отношения. При этом X --> Y и Y --> Z, но обратное соответствие отсутствует, т.е. Z -/-> Y и Y -/-> X. Тогда Z транзитивно зависит от X.

Отношение находится в 3НФ, если оно находится во 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

Пример приведения в 3НФ:

ХРАНЕНИЕ (ФИРМА, СКЛАД, ОБЪЕМ) 	
(функциональные зависимости: фирма -> склад; склад -> объем)

Аномалии:

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

Для этого заменяем на два отношения (3НФ):

ХРАНЕНИЕ (ФИРМА, СКЛАД)
ОБЪЕМ_СКЛАДА (СКЛАД, ОБЪЕМ)

BCNF - нормальная форма Бойса-Кодда

Отношение находится в BCNF, если оно находится во 3НФ и в ней отсутствуют зависимости атрибутов первичного ключа от неключевых атрибутов.

Ситуация, когда отношение будет находится в 3NF, но не в BCNF, возникает при условии, что отношение имеет два (или более) возможных ключа, которые являются составными и имеют общий атрибут. На практике такая ситуация встречается достаточно редко, для всех прочих отношений 3NF и BCNF эквивалентны.

Clone this wiki locally