Ответ
Нормальная форма Бойса-Кодда (BCNF) — это строгая версия третьей нормальной формы (3NF). Она устраняет аномалии, возникающие из-за функциональных зависимостей, в которых детерминант (левая часть зависимости) не является потенциальным ключом.
Формальное условие BCNF:
Таблица находится в BCNF, если для каждой нетривиальной функциональной зависимости X → Y (где Y не является подмножеством X), X является суперключом (содержит какой-либо потенциальный ключ) этой таблицы.
Проще говоря: Каждый атрибут (или набор атрибутов), от которого что-то зависит, должен быть уникальным идентификатором строки (ключом).
Пример нарушения BCNF:
Рассмотрим таблицу Занятие: |
Студент_ID | Курс | Преподаватель |
|---|
Допустим, действуют зависимости:
{Студент_ID, Курс} → Преподаватель(составной ключ определяет преподавателя).Курс → Преподаватель(курс определяет преподавателя).
Проблема: Зависимость Курс → Преподаватель нарушает BCNF, потому что Курс (детерминант) не является суперключом (один курс могут вести несколько преподавателей? Нет, по условию зависимости — один). Это приводит к аномалиям:
- Избыточность: Имя преподавателя повторяется для каждого студента на курсе.
- Аномалия обновления: Чтобы сменить преподавателя на курсе, нужно обновить все строки с этим курсом.
Приведение к BCNF (декомпозиция): Разделим исходную таблицу на две:
Студент_Курс(Студент_ID, Курс) — содержит составной первичный ключ.Курс_Преподаватель(Курс, Преподаватель) — гдеКурсявляется первичным ключом.
Теперь в каждой новой таблице детерминант всех функциональных зависимостей является суперключом.