Какое дополнительное условие, кроме детерминанта, необходимо для приведения таблицы к НФБК?

«Какое дополнительное условие, кроме детерминанта, необходимо для приведения таблицы к НФБК?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для приведения таблицы к нормальной форме Бойса-Кодда (НФБК, 3.5NF) требуется, чтобы каждый нетривиальный функциональный детерминант (левая часть функциональной зависимости) был потенциальным ключом (суперключом).

Проще говоря: В НФБК не должно быть зависимостей неключевых атрибутов от других неключевых атрибутов. Все неключевые поля должны зависеть только от всего ключа целиком, и ни от чего больше.

Отличие от 3НФ: 3НФ запрещает транзитивные зависимости неключевых атрибутов, но допускает зависимость части ключа от неключевого атрибута. НФБК устраняет и эту аномалию.

Пример нарушения НФБК и исправление:

-- НЕ НФБК: Supplier зависит от ProductID, который НЕ является ключом.
CREATE TABLE OrderDetails (
    OrderDetailID INT PRIMARY KEY,
    ProductID INT,
    Supplier VARCHAR(100) -- Зависит от ProductID (детерминант - не ключ!)
);

-- Приведение к НФБК: Выносим зависимость в отдельную таблицу.
CREATE TABLE Products (
    ProductID INT PRIMARY KEY, -- ProductID теперь ключ-детерминант
    Supplier VARCHAR(100)
);

CREATE TABLE OrderDetails (
    OrderDetailID INT PRIMARY KEY,
    ProductID INT REFERENCES Products(ProductID) -- Теперь детерминант - внешний ключ
);

Итог: Если в таблице есть зависимость X → Y, где X — не потенциальный ключ, таблица не соответствует НФБК и требует декомпозиции.