При определении 3НФ было сделано допущение о том, что отношение имеет только один потенциальный ключ, который и является первичным. Если рассмотреть более общий случай, то первоначальное определение, данное Э. Коддом для ЗНФ, оказывается не во всех случаях удовлетворительным. В частности, оно неадекватно при выполнении следующих условий:
1) отношение имеет два (или больше) потенциальных ключа;
2) эти потенциальные ключи являются составными;
3) они перекрываются (т.е. имеют по крайней мере один общий атрибут).
Поэтому впоследствии исходное определение ЗНФ было заменено более строгим определением Бойса-Кодда.
На практике комбинация всех трёх условий встречается редко, и для отношений, в которых не выполняются все эти три условия, 3НФ и нормальная форма Бойса-Кодда полностью эквивалентны.
Нормальная форма Бойса-Кодда (НФБК). Отношение находится в нормальной форме Бойса-Кодда тогда и только тогда, когда каждая ее нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.
|
|
Рассмотрим следующее отношение:
StudentID | CourseID | TeacherID |
Каждый кортеж означает, что некоторый студент изучает определенную дисциплину у указанного преподавателя. При этом существуют следующие ограничения:
1. Каждый преподаватель ведет только одну дисциплину.
2. Одну дисциплину может вести несколько преподавателей.
3. Для некоторого студента одну дисциплину ведет только один преподаватель.
В данном отношении есть два потенциальных ключа { StudentID, CourseID } и { StudentID, TeacherID }. Оба ключа являются составными и они имеют общий атрибут StudentID, т.е. перекрываются. Таким образом выполнены все три условия, которые могут привести к ситуации, когда отношение может находиться в 3НФ, но не находится в НФБК.
Очевидно, что отношение находится в 3НФ:
· значения всех атрибутов неделимы (1НФ);
· каждый неключевой атрибут неприводимо зависит от первичного ключа (2НФ);
· все неключевые атрибуты нетранзитивно зависят от потенциального ключа (3НФ).
Однако, в данном отношении существует ФЗ TeacherID → CourseID и TeacherID при этом не является потенциальным ключом, следовательно отношение не находится в НФБК.
Если произвести декомпозицию этого отношения на два: { StudentID, CourseID } и { CourseID, TeacherID }, то потеряем информацию о том, какой именно преподаватель ведет дисциплину для конкретного студента. Это объясняется тем, что исходное отношение является атомарным, т.е. его нельзя разбить на две независимые проекции.
Таким образом, в процессе нормализации не всегда есть смысл стремиться к атомарным отношениям, но, тем не менее, для основных объектов базы данных рекомендуется добиваться атомарности.
|
|
Если отношение находится только в 1НФ, но не находится во 2НФ и 3НФ, то можно говорить об избыточности информации. Избыточность не только увеличивает объём и трудоёмкость заполнения базы данных, но и может привести к аномалиям обновления. Аномалии могут приводить к трудностям при вставке, обновлении и удалении, а главное к искажению или потере информации.
Краткие итоги. Рассмотрены первая, вторая, третья нормальные формы и нормальная форма Бойса-Кодда. На примерах разобран процесс приведения отношения в заданную нормальную форму.