Пусть есть отношение «проект» (деталь, №проекта, поставщик), отражающее использование в проектах деталей, поставляемых поставщиками. В проекте используется несколько деталей, поставляемых только одним поставщиком. Каждый поставщик обслуживает только один проект, но проекты могут обеспечиваться несколькими поставщиками. В отношениях присутствуют следующие функциональные зависимости: деталь, номер проекта ® поставщик (по определению ключа), поставщик ® № проекта. Это отношение находится в 3НФ, т.к. в нём нет неполных функциональных зависимостей и транзитивных зависимостей не первичных атрибутов от ключей, но есть следующие аномалии:
1 Включения. Факт поставки поставщиком детали не может быть занесен в БД до тех пор, пока в проекте не начнут использовать эти детали;
2 Удаления. Если последний из типов деталей использован, данные о поставщике будут также удалены из БД;
3 Обновления. Если меняется поставщик некоторого типа деталей, необходим просмотр отношения для изменения всех картежей, содержащих эти детали.
Разложение исходного отношения на отношение НФ Б-К устраняет рассмотренные аномалии.
Отношение находится в НФ Б-К, если оно находится в 3НФ, и в нём отсутствуют зависимости первичных атрибутов от не первичных. Т.е. если все домены функциональных зависимостей не являются возможными ключами. Для этого необходимо установить в данном отношении зависимость: поставщик® № проекта, что достигается следующим разложением:
Проект «деталь» (деталь, № проекта)
Поставки (поставщик, № проекта).
В отношениях кроме функциональных зависимостей существуют и другие. Например, многозначные зависимости, в которых кроме основных есть другие атрибуты в отношении (->>).
Говорят, что А многозначно определяет В в отношении R, или что В многозначно зависит от А, если каждому значению А соответствует множество значений В, никак не связанных с другими атрибутами отношения R. При этом В может быть пустым множеством.
Например, есть отношение «преподаватели» (шифр, дисциплины, дети, должность). Между преподавателями и детьми связь один ко многим, а между преподавателями и дисциплинами - много ко многим (m : n). При этом считается, что некоторые курсы могут читать несколько преподавателей.
Номер
картежа
Шифр
Дети
Дисциплина
Должность
Вася
БД
Доцент
Петя
АСНИ
Доцент
Вася
АСНИ
Доцент
Петя
БД
Доцент
Коля
БД
Профессор
Если объявляется многозадачная зависимость атрибутов «дети» или «дисциплины» от атрибута «шифр», то каждому значению атрибута «шифр» должно соответствовать фиксированное множество значений атрибутов «дети» и «дисциплины» соответственно. Возможно изменение значений этих атрибутов в любой строке отношения. Замена значения атрибута «дисциплина» в картеже № 2 даёт картеж № 4. Замена значения атрибута «дети» в картеже № 2 даёт картеж № 3. Т.е. оба полученных картежа уже есть в отношении, т.о. другие значения картежей никак не связаны со значениями многозначных атрибутов, следовательно есть две многозначные зависимости: шифр ->> дети, шифр ->> дисциплина. Для наличия в отношении многозначной зависимости необходимо иметь минимум три атрибута (ключ и не менее двух независимых атрибутов).
Четвёртая нормальная форма (4НФ).
Отношение находится в 4НФ, если оно находится в НФ Б-К, и в нём отсутствуют многозначные зависимости, которые не являются функциональными.
R1 шифр® дети
R2 шифр® дисциплины
R3 шифр® должность
4НФ показывает, что отношение может находиться в НФ Б-К и, тем не менее, могут существовать некоторые аномалии. Например, если у преподавателя появился ещё один ребёнок, то в отношения надо добавить столько строк (картежей), сколько он ведёт дисциплин. Аналогично при появлении новых дисциплин.
Пятая нормальная форма (5НФ).
Отношение находится в 5НФ, если каждая его проекция содержит не менее одного возможного ключа и, по крайней мере, один не первичный атрибут. Иначе говорят, что отношение находится в 5НФ, когда любая зависимость по соединению отношений определяется его возможными ключами.
Резюме.
Цели нормализации:
1 освобождение набора отношений от нежелательных зависимостей при корректировке;
2 снижение необходимости перестройки набора отношений при введении новых атрибутов, что увеличивает период жизни БД и ПО;
3 стремление сделать модель более информативной для пользователя;
4 стремление сделать набор отношений нейтральным для прикладного ПО.
Процесс нормализации может быть разделён на четыре шага.
1 Переход от произвольной структуры данных, не являющейся двумерной к двумерным отношениям.
2 Устранение всех неполных зависимостей атрибутов, не являющихся основными от вероятных ключей.
3 Устранение всех транзитивных зависимостей атрибутов, не являющихся основными от вероятных ключей.
4 Устранение всех нетривиальных многозначных зависимостей атрибутов, не являющихся основными от вероятных ключей.
Отношение в нормальной форме Бойса-Кодда, если оно в третьей нормальной форме и в нем отсутствуют зависимости первичных атрибутов от не первичных, т.е. все домены функциональных зависимостей являются возможными ключами.
Отношение в четвёртой нормальной форме, если оно в нормальной форме Бойса-Кодда и в нём отсутствуют многозначные зависимости, которые не являются функциональными.
Отношение в пятой нормальной форме, если каждая его проекция содержит не менее одного вариантного ключа, и по крайней мере один не первичный атрибут (т.е. любая зависимость определяется его возможными ключами).