-
Notifications
You must be signed in to change notification settings - Fork 0
БД6. Нормализация отношений. Первая, вторая и третья нормальные формы. Нормальная форма Бойса Кодда.
Процесс нормализации заключается в разложении (декомпозиции) исходных отношений БД на более простые отношения. Каждая ступень этого процесса приводит схему отношений в последовательные нормальные формы. Для каждой ступени нормализации имеются наборы ограничений, которым должны удовлетворять отношения БД.
Простой атрибут - атрибут, значения которого атомарны (неделимы).
Сложный атрибут - получается соединением нескольких атомарных атрибутов, которые могут быть определены на одном или разных доменах. (его также называют вектор или агрегат данных).
Отношение находится в 1NF если значения всех его атрибутов атомарны.
Алгоритм нормализации описан следующим образом:
- Начиная с отношения, находящегося на верху дерева, берется его первичный ключ, и каждое непосредственно подчиненное отношение расширяется путем вставки домена или комбинации доменов этого первичного ключа.
- Первичный Ключ каждого расширенного таким образом отношения состоит из Первичного Ключа, который был у этого отношения до расширения и добавленного Первичного Ключа родительского отношения.
- После этого из родительского отношения вычеркиваются все непростые домены, удаляется верхний узел дерева, и эта же процедура повторяется для каждого из оставшихся поддеревьев.
Отношение находится во 2НФ, если оно находится в 1НФ и каждый неключевой атрибут функционально полно зависит от ключа.
Неключевой атрибут функционально полно зависит от составного ключа если он функционально зависит от всего ключа в целом, но не находится в функциональной зависимости от какого-либо из входящих в него атрибутов.
ПОСТАВКИ (N_ПОСТАВЩИКА, ТОВАР, ЦЕНА).
* Пусть все поставщики поставляют товар по одной и той же цене, тогда:
(функциональные зависимости: N_поставщика, товар -> цена; товар -> цена)
Аномалия: при изменении цены товара необходим полный просмотр отношения для того, чтобы изменить все записи о его поставщиках (т.к. в одной структуре данных объединены два семантических факта).
Разложение во 2НФ:
ПОСТАВКИ (N_ПОСТАВЩИКА, ТОВАР)
ЦЕНА_ТОВАРА (ТОВАР, ЦЕНА)
Пусть X, Y, Z - три атрибута некоторого отношения. При этом X --> Y и Y --> Z, но обратное соответствие отсутствует, т.е. Z -/-> Y и Y -/-> X. Тогда Z транзитивно зависит от X.
Отношение находится в 3НФ, если оно находится во 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.
ХРАНЕНИЕ (ФИРМА, СКЛАД, ОБЪЕМ)
(функциональные зависимости: фирма -> склад; склад -> объем)
Аномалии:
- если в данный момент ни одна фирма не получает товар со склада, то в базу данных нельзя ввести данные о его объеме (т.к. не определен ключевой атрибут)
- если объем склада изменяется, необходим просмотр всего отношения и изменение кортежей для всех фирм, связанных с данным складом.
Для этого заменяем на два отношения (3НФ):
ХРАНЕНИЕ (ФИРМА, СКЛАД)
ОБЪЕМ_СКЛАДА (СКЛАД, ОБЪЕМ)
Отношение находится в BCNF, если оно находится во 3НФ и в ней отсутствуют зависимости атрибутов первичного ключа от неключевых атрибутов.
Ситуация, когда отношение будет находится в 3NF, но не в BCNF, возникает при условии, что отношение имеет два (или более) возможных ключа, которые являются составными и имеют общий атрибут. На практике такая ситуация встречается достаточно редко, для всех прочих отношений 3NF и BCNF эквивалентны.