Определение:
Если даны два атрибута X и Y некоторого отношения, то говорят, что Y функционально зависит от X, если в любой момент времени каждому значению X соответствует ровно одно значение Y.
Функциональная зависимость обозначается X -> Y. Отметим, что X и Y могут представлять собой не только единичные атрибуты, но и группы, составленные из нескольких атрибутов одного отношения.
Можно сказать, что функциональные зависимости представляют собой связи типа "один ко многим", существующие внутри отношения.
Некоторые функциональные зависимости могут быть нежелательны.
Определение:
Избыточная функциональная зависимость - зависимость, заключающая в себе такую информацию, которая может быть получена на основе других зависимостей, имеющихся в базе данных.
Корректной считается такая схема базы данных, в которой отсутствуют избыточные функциональные зависимости. В противном случае приходится прибегать к процедуре декомпозиции (разложения) имеющегося множества отношений. При этом порождаемое множество содержит большее число отношений, которые являются проекциями отношений исходного множества. (Операция проекции описана в разделе, посвященном реляционной алгебре). Обратимый пошаговый процесс замены данной совокупности отношений другой схемой с устранением избыточных функциональных зависимостей называется нормализацией.
Условие обратимости требует, чтобы декомпозиция сохраняла эквивалентность схем при замене одной схемы на другую, т.е. в результирующих отношениях:
Простой атрибут - атрибут, значения которого атомарны (неделимы).
Сложный атрибут - получается соединением нескольких атомарных атрибутов, которые могут быть определены на одном или разных доменах. (его также называют вектор или агрегат данных).
Теперь можно дать
Определение первой нормальной формы:
отношение находится в 1NF если значения всех его
атрибутов атомарны.
Рассмотрим пример, заимствованный из уже упоминавшейся статьи Е.Ф.Кодда:
В базе данных отдела кадров предприятия необходимо хранить сведения о служащих, которые можно попытаться представить в отношении
Из внимательного рассмотрения этого отношения
следует, что атрибуты "история_работы" и "дети" являются
сложными, более того, атрибут "история_работы" включает еще
один сложный атрибут "история_зарплаты".
Данные агрегаты выглядят следующим образом:
Их связь представлена на рис. 4.3.
Для приведения исходного отношения СЛУЖАЩИЙ к первой нормальной форме
необходимо декомпозировать его на четыре отношения, так как это показано
на следующем рисунке:
Здесь первичный ключ каждого отношения выделен синей рамкой, названия внешних ключей набраны шрифтом синего цвета. Напомним, что именно внешние ключи служат для представления функциональных зависимостей, существующих в исходном отношении. Эти функциональные зависимости обозначены линиями со стрелками.
Алгоритм нормализации описан Е.Ф.Коддом следующим образом:
Определение:
неключевой атрибут функционально полно зависит
от составного ключа если он функционально зависит от всего ключа в целом,
но не находится в функциональной зависимости от какого-либо из входящих
в него атрибутов.
Пример:
Пусть имеется отношение ПОСТАВКИ (N_ПОСТАВЩИКА, ТОВАР, ЦЕНА).
Поставщик может поставлять различные товары, а один и тот же товар
может поставляться разными поставщиками. Тогда ключ отношения - "N_поставщика
+ товар". Пусть все поставщики поставляют товар по одной и той же цене.
Тогда имеем следующие функциональные зависимости:
Определение второй нормальной формы:
Отношение находится во 2НФ, если оно находится в 1НФ и каждый неключевой атрибут функционально полно зависит от ключа.
Определение:
Пусть X, Y, Z - три атрибута некоторого отношения.
При этом X --> Y и Y --> Z, но обратное
соответствие отсутствует, т.е. Z -/-> Y и Y -/->
X. Тогда Z транзитивно зависит от X.
Пусть имеется отношение ХРАНЕНИЕ (ФИРМА, СКЛАД, ОБЪЕМ), которое
содержит информацию о фирмах, получающих товары со складов, и объемах этих
складов. Ключевой атрибут - "фирма". Если каждая фирма может получать
товар только с одного склада, то в данном отношении имеются следующие функциональные
зависимости:
Отношение находится в 3НФ, если оно находится
во 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного
ключа.
Отношение находится в BCNF, если оно находится во 3НФ и в ней отсутствуют зависимости атрибутов первичного ключа от неключевых атрибутов.
Ситуация, когда отношение будет находится в 3NF, но не в BCNF, возникает при условии, что отношение имеет два (или более) возможных ключа, которые являются составными и имеют общий атрибут. Заметим, что на практике такая ситуация встречается достаточно редко, для всех прочих отношений 3NF и BCNF эквивалентны.
Многозначная зависимость является обобщением функциональной зависимости и рассматривает соответствия между множествами значений атрибутов.
В качестве примера рассмотрим отношение ПРЕПОДАВАТЕЛЬ (ИМЯ, КУРС, УЧЕБНОЕ_ПОСОБИЕ), хранящее сведения о курсах, читаемых преодавателем, и написанных им учебниках. Пусть профессор N читает курсы "Теория упругости" и "Теория колебаний" и имеет соответствующие учебные пособия, а профессор K читает курс "Теория удара" и является автором учебников "Теория удара" и "Теоретическая механика". Тогда наше отношение будет иметь вид:
---------------------------------------------------- | ИМЯ | КУРС | УЧЕБНОЕ_ПОСОБИЕ | ---------------------------------------------------- | N | Теория упругости | Теория упругости | | N | Теория колебаний | Теория упругости | | N | Теория упругости | Теория колебаний | | N | Теория колебаний | Теория колебаний | | K | Теория удара | Теория удара | | K | Теория удара | Теоретическая механика | ---------------------------------------------------- добавляем: ---------------------------------------------------- | K | Теория упругости | Теория удара | | K | Теория упругости | Теоретическая механика | ----------------------------------------------------Это отношение имеет значительную избыточность и его использование приводит к возникновению аномалии обновления. Например, добавление информации о том, что профессор K будет также читать лекции по курсу "Теория упругости" приводит к необходимости добавить два кортежа (по одному для каждого написанного им учебника) вместо одного. Тем не менее, отношение ПРЕПОДАВАТЕЛЬ находится в NFBC (ключевой атрибут - ИМЯ).
Заметим, что указанные аномалии исчезают при замене отношения ПРЕПОДАВАТЕЛЬ его проекциями:
--------------------------- ------------------------------- | ИМЯ | КУРС | | ИМЯ | УЧЕБНОЕ_ПОСОБИЕ | --------------------------- ------------------------------- | N | Теория упругости | | N |Теория упругости | | N | Теория колебаний | | N |Теория колебаний | | K | Теория удара | | K |Теоретическая механика | | K | Теория упругости | | K |Теория удара | --------------------------- -------------------------------Аномалия обновления возникает в данном случае потому, что в отношении ПРЕПОДАВАТЕЛЬ имеются:
Такие зависимости и называются многозначными и обозначаются как
ИМЯ ->> КУРС ИМЯ ->> УЧЕБНОЕ_ПОСОБИЕНетрудно показать, что многозначные зависимости всегда образуют связанные пары, поэтому их часто обозначают
ИМЯ ->> КУРС | УЧЕБНОЕ_ПОСОБИЕОчевидно, что каждая функциональная зависимость является многозначной, но не каждая многозначная зависимость является функциональной.
Определение четвертой нормальной формы:
Отношение находится в 4NF если оно находится в BCNF и в нем отстутсвуют многозначные зависимости, не являющиеся функциональными зависимостями.
До сих пор мы предполагали, что единственной операцией, необходимой для устранения избыточности в отношении, была декомпозиция его на две проекции. Однако, существуют отношения, для которых нельзя выполнить декомпозицию без потерь на две проекции, но которые можно подвергнуть декомпозиции без потерь на три (или более) проекций. Этот факт получил название зависимости по соединению, а такие отношения называют 3-декомпозируемые отношения (ясно, что любое отношение можно назвать "n-декомпозируемым", где n >= 2).
Детально этот вопрос здесь мы не обсуждаем (полное изложение см. в книге К.Дейта), заметим лишь, что зависимость по соединению является обощением многозначной зависимости. Отношения, в которых имеются зависимости по соединению, не являющиеся одновременно ни многозначными, ни функциональными, также характеризуются аномалиями обновления. Поэтому, вводится понятие пятой нормальной формы.
Определение пятой нормальной формы:
Отношение находится в 5НФ тогда и только тогда, когда любая зависимость по соединению в нем определяется только его возможными ключами.
Другими словами, каждая проекция такого отношения содержит не менее одного
возможного ключа и не менее одного неключевого атрибута.