Ответ
Нормальная форма Бойса-Кодда (BCNF) — это усиленная версия третьей нормальной формы (3НФ), предназначенная для устранения аномалий, связанных с функциональными зависимостями, которые не были устранены в 3НФ.
Определение:
Таблица находится в BCNF, если для каждой нетривиальной функциональной зависимости X → Y детерминант X является суперключом (т.е. содержит потенциальный ключ таблицы).
Проблема, которую решает BCNF: В 3НФ возможна ситуация, когда неключевой атрибут функционально определяет часть составного ключа, что приводит к избыточности и аномалиям обновления.
Пример нормализации в BCNF:
Исходная таблица Enrollment не в BCNF:
-- {student_id, subject} → professor, но также professor → subject
-- professor не является суперключом, нарушение BCNF.
CREATE TABLE Enrollment (
student_id INT,
subject VARCHAR(50),
professor VARCHAR(50),
PRIMARY KEY (student_id, subject)
);
Нормализация: Разделяем на две таблицы, устраняя зависимость неключевого атрибута.
-- Таблица 1: Профессор определяет предмет (professor — суперключ).
CREATE TABLE ProfessorSubject (
professor VARCHAR(50) PRIMARY KEY,
subject VARCHAR(50)
);
-- Таблица 2: Связь студента и профессора.
CREATE TABLE StudentEnrollment (
student_id INT,
professor VARCHAR(50),
PRIMARY KEY (student_id, professor),
FOREIGN KEY (professor) REFERENCES ProfessorSubject(professor)
);
Результат: Обе новые таблицы находятся в BCNF, аномалии устранены.