Нормальная форма Бойса – Кодда следует по
«сложности» сразу после третьей нормальной формы. Поэтому нормальную
форму Бойса – Кодда еще иногда называют просто усиленной третьей нормальной формой (или усиленной 3 NF). Почему же она именно усиленная? Сформулируем определение нормальной формы Бойса – Кодда:
Определение. Базовое отношение находится в нормальной форме Бойса – Кодда
тогда и только тогда, когда она находится в третьей нормальной форме, и
при этом не только любой неключевой атрибут полностью функционально
зависит от любого ключа, но и любой ключевой атрибут должен полностью
функционально зависеть от любого ключа.
Таким образом, требование о фактической зависимости
неключевых атрибутов от всего ключа целиком и ни от чего другого, кроме
как от ключа, распространяется и на ключевые атрибуты.
В отношении, находящемся в нормальной форме Бойса –
Кодда, все функциональные зависимости в пределах отношения навязаны
объявлением ключей. Однако при приведении отношений баз данных к форме
Бойса – Кодда, возможны ситуации, при которых не навязанными
функциональными зависимостями оказываются зависимости между атрибутами
различных отношений. Поддержка таких функциональных зависимостей при
помощи триггеров, оперирующих кортежами различных отношений, сложнее,
чем в случае третьей нормальной формы, когда триггеры оперируют
кортежами единственного отношения.
Кроме всего прочего, практика проектирования систем
управления базами данных показала, что не всегда удается привести
базовое отношение к нормальной форме Бойса – Кодда.
Причиной отмеченных аномалий является то, что в
требованиях второй нормальной формы и третьей нормальной формы не
требовалась минимальная функциональная зависимость от первичного ключа
атрибутов, являющихся компонентами других возможных ключей. Эту проблему
и решает нормальная форма, которую исторически принято называть
нормальной формой Бойса – Кодда и которая является уточнением третьей
нормальной формы в случае наличия нескольких перекрывающихся возможных
ключей.
Вообще нормализация схемы базы данных способствует более
эффективному выполнению системой управления базами данных операций
обновления базы данных, поскольку сокращается число проверок и
вспомогательных действий, поддерживающих целостность базы данных. При
проектировании реляционной базы данных почти всегда добиваются второй
нормальной формы всех входящих в базу данных отношений. В часто
обновляемых базах данных обычно стараются обеспечить третью нормальную
форму отношений. На нормальную форму Бойса – Кодда внимание обращают
гораздо реже, поскольку на практике ситуации, в которых у отношения
имеется несколько составных перекрывающихся возможных ключей,
встречаются нечасто.
Все вышеназванное делает нормальную форму Бойса – Кодда
не слишком удобной в использовании при разработке программного кода,
поэтому, как уже было сказано ранее, на практике разработчики обычно
ограничиваются приведением своих баз данных к третьей нормальной форме.
Однако здесь тоже есть своя довольно любопытная особенность. Дело в том,
что ситуации, когда отношение находится в третьей нормальной форме, но
не находится в нормальной форме Бойса – Кодда крайне редки на практике,
т. е. после приведения к третьей нормальной форме обычно все
функциональные зависимости оказываются навязанными объявлениями
первичных, кандидатных и внешних ключей, так что необходимость в
триггерах для поддержки функциональных зависимостей отпадает.
Однако необходимость в триггерах остается для поддержки ограничения целостности, не связанных функциональными зависимостями. |