
10.6 Нормальная форма Бойса–Кодда
В предыдущих двух разделах преобразование отношений во вторую и третью нормальную форму рассматривалось на примере отношений, имеющих единственный потенциальный (он же первичный) ключ. Для такого рода отношений преобразование в третью нормальную форму решает все приведенные выше нежелательные эффекты, связанные с ограничением функциональных зависимостей. На практике, однако, возможны более сложные случаи:
отношение может иметь два или более потенциальных ключа;
потенциальные ключи могут быть не простыми, а составными, то есть включать в себя несколько атрибутов;
наконец, составные потенциальные ключи могут перекрываться (иметь один или несколько общих атрибутов).
Оказывается, что в этих более сложных случаях преобразование отношений в третью нормальную форму не всегда обеспечивает решение нежелательных проблем, связанных с аномалиями операций обновления. Для их устранения была введена еще одна нормальная форма, получившая название нормальной формы Бойса – Кодда или сокращенно НФБК. (Хотя Дейт [1] отмечает, что определение этой нормальной формы впервые в 1971 г. было дано Хезом (Heath)).
Отношение находится в нормальной форме Бойса-Кодда тогда и только тогда, когда детерминанты каждой нетривиальной и неприводимой слева функциональной зависимости являются потенциальными ключами отношения.
Напомним, что детерминантом называется левая (определяющая) часть функциональной зависимости, а тривиальной мы называем функциональную зависимость, у которой правая (зависимая) часть является подмножеством ее левой части (детерминанта).
То есть на диаграммах функциональных зависимостей отношения, находящегося в нормальной форме Бойса – Кодда, стрелки, указывающие на эти зависимости, должны исходить только от потенциальных ключей.
Можно обратить внимание на то, что приведенное определение нормальной формы Бойса – Кодда не использует явных ссылок на первую, вторую и третью нормальные формы, а также на транзитивную функциональную зависимость, и с этой точки зрения оно концептуально проще. Однако на практике обычно более просто осуществлять нормализацию отношений путем последовательного их преобразования из первой нормальной формы во вторую, а затем в третью нормальную форму и, если необходимо, в нормальную форму Бойса – Кодда.
Рассмотрим теперь вопросы, связанные с нормальной формы Бойса – Кодда на примерах.
Пример 1.
Возвращаясь к отношению Экзамен на рис. 10.8, которое находится в первой и не находится во второй нормальной форме, можно убедиться, что отношение не находится в НФБК. Действительно, его детерминантами являются простой атрибут КОД_СТУДЕНТА и составной атрибут {КОД_СТУДЕНТА, Дисциплина}. Из этих двух детерминантов только {КОД_СТУДЕНТА, ДИСЦИПЛИНА} является потенциальным ключом отношения.
Пример 2.
Отношение студент_общежитие_АДРЕС на рис.10.12, которое находится во второй, но не находится в третьей нормальной форме, также не находится в НФБК, так как его детерминантами являются атрибут КОД_СТУДЕНТА и атрибут ОБЩЕЖИТИЕ, из которых только атрибут КОД_СТУДЕНТА является ключом отношения.
Пример 3.
Отношения СТУДЕНТЫ и УСПЕВАЕМОСТЬ, представленные на рис.10.9, и отношения СТУДЕНТ_ОБЩЕЖИТИЕ и ОБЩЕЖИТИЕ_АДРЕС на рис.10.14, которые, как мы знаем, находятся в третьей нормальной форме, также находятся и в НФБК. Действительно, их детерминанты, а именно составной атрибут {КОД_СТУДЕНТА, ДИСЦИПЛИНА} в отношении УСПЕВАЕМОСТЬ, атрибут КОД_СТУДЕНТА в отношениях СТУДЕНТЫ и СТУДЕНТ_ОБЩЕЖИТИЕ, атрибут ОБЩЕЖИТИЕ в ОБЩЕЖИТИЕ_АДРЕС, одновременно являются и ключами этих отношений.
Приведенные примеры иллюстрируют тот факт, что для отношений, в которых имеется лишь один потенциальный ключ, нахождение отношения в третьей нормальной форме эквивалентно его нахождению в нормальной форме Бойса – Кодда.
Теперь рассмотрим примеры отношений, в которых больше одного потенциального ключа, а затем и примеры отношений с перекрывающимися составными потенциальными ключами.
Пример 4.
Рассмотрим отношение, диаграмма функциональных зависимостей которого имеет вид, представленный на рис. 10.16.
Рис.10.16. Диаграммы функциональных зависимостей отношения с двумя потенциальными ключами
Как видно из этой диаграммы, это отношение, в отличие от рассматриваемых ранее, имеет два потенциальных ключа. Это – атрибуты КОД_СТУДЕНТА и ПАСПОРТ, от каждого из которых все остальные атрибуты зависят функционально. Это отношение находится во второй и третьей нормальных формах, так как в нем отсутствуют неприводимые слева функциональные зависимости неключевых атрибутов от потенциальных ключей и отсутствуют транзитивные зависимости.
Это отношение находится также и в нормальной форме Бойса – Кодда. Действительно, детерминанты этого отношения атрибуты КОД_СТУДЕНТА и ПАСПОРТ одновременно являются и его потенциальными ключами.
Приведенный пример иллюстрирует тот факт, что само по себе наличие в отношении нескольких потенциальных ключей не приводит к неэквивалентности третьей нормальной формы и нормальной формы Бойса – Кодда.
И, наконец, обратим внимание на следующий пример.
Пример 5.
|
|
|
Рис.10.17. Отношение с двумя перекрывающимися потенциальными ключами
Пусть в этом отношении имеют место следующие функциональные зависимости, представленные на рис. 10.18.
Рис.10.18. Диаграмма функциональных зависимостей отношения
Как видно из этих зависимостей, отношение имеет два потенциальных ключа. Ими являются составные атрибуты {КОД_СТУДЕНТА, ДИСЦИПЛИНА} и {ПАСПОРТ, ДИСЦИПЛИНА}. Обращаем внимание на то, что ключи эти являются перекрывающимися, так как атрибут Дисциплина входит в состав обоих ключей.
Представленное отношение находится в третьей нормальной форме, так как его единственный неключевой атрибут Оценка зависит от обоих ключей неприводимо, и в отношении отсутствуют транзитивные функциональные зависимости.
Однако, это отношение не находится в НФБК. Действительно, в нем имеются детерминанты КОД_СТУДЕНТА и ПАСПОРТ, которые сами не являются потенциальными ключами, хотя и входят в их состав.
Обратившись к примеру таблицы на рис.10.17, представляющей это отношение, можно увидеть наличие в нем избыточной информации: многократно повторяющиеся одинаковые пары значений атрибутов КОД_СТУДЕНТА и ПАСПОРТ. Нетрудно понять, что эта избыточность приводит к возникновению типичных аномалий операций обновления данных:
невозможно ввести информацию о коде студента и его паспорте, если этот студент не сдавал ни одной дисциплины,
при удалении данных о сдаче экзамена по иностранному языку студентом с кодом С8 теряется информация о паспорте этого студента,
при необходимости изменения номера паспорта студента, например при его замене, эту операцию надо произвести во всех кортежах, относящихся к этому студенту.
Выходом из ситуации является декомпозиция рассматриваемого отношения на два отношения.
|
|
Рис.10.19. Вариант декомпозиции отношения, представленного на рис.10.17
Рис.10.20. Диаграммы функциональных зависимостей отношений на рис.10.19
Возможен и другой вариант декомпозиции, представленный на рис.10.21.
Рис.10.21. Другой вариант декомпозиции отношения на рис.10.17
Можно убедиться, что каждое из отношений, представленных на рис.10.19 – 10.21, уже находится в нормальной форме Бойса – Кодда, и в них отсутствуют аномалии операций обновления данных.
Пример 6.
Пусть дано отношение со следующим набором атрибутов
{КОД_СТУДЕНТА, Дисциплина, ОЦЕНКА, НОМЕР_БИЛЕТА}.
Кортежи этого отношения представляют информацию о том, что конкретный студент при сдаче конкретной дисциплины отвечает на вопросы определенного экзаменационного билета. При этом имеется ограничение, состоящее в том, что никакие два студента не могут отвечать на один и тот же билет по одной дисциплине. Это ограничение эквивалентно следующим функциональным зависимостям
{КОД_СТУДЕНТА, ДИСЦИПЛИНА} → {НОМЕР_БИЛЕТА},
{ДИСЦИПЛИНА, НОМЕР_БИЛЕТА} → {КОД_СТУДЕНТА},
{КОД_СТУДЕНТА, ДИСЦИПЛИНА} → {ОЦЕНКА},
{ДИСЦИПЛИНА, НОМЕР_БИЛЕТА} → {ОЦЕНКА}.
Видно, что отношение имеет два перекрывающихся составных потенциальных ключа. Этими ключами являются составные атрибуты {КОД_СТУДЕНТА, ДИСЦИПЛИНА} и {ДИСЦИПЛИНА, НОМЕР_БИЛЕТА}. При этом нетрудно убедиться, что представленное отношение находится в нормальной форме Бойса – Кодда, так как все его детерминанты являются потенциальными ключами.
Данный пример иллюстрирует тот факт, что само по себе наличие перекрывающихся составных потенциальных ключей не является признаком того, что отношение не находится в нормальной форме Бойса – Кодда.
NEXT THEME