Что такое шестая нормальная форма (6NF) в реляционных базах данных?

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

Ответ

Шестая нормальная форма (6NF) — это высший уровень нормализации, при котором каждая таблица содержит только один неделимый (атомарный) атрибут помимо первичного ключа. Фактически, она устраняет все возможные зависимости между атрибутами, включая транзитивные и многозначные.

Суть: Таблица в 6NF не содержит нетривиальных соединений зависимостей. Это достигается декомпозицией до таблиц с двумя колонками: ключ и значение.

Пример преобразования в 6NF: Исходная таблица Orders(order_id, customer_id, product_id, quantity).

В 6NF она разбивается на несколько таблиц:

CREATE TABLE Order_Customer (
    order_id INT PRIMARY KEY,
    customer_id INT
);
CREATE TABLE Order_Product (
    order_id INT PRIMARY KEY,
    product_id INT
);
CREATE TABLE Order_Quantity (
    order_id INT PRIMARY KEY,
    quantity INT
);
-- Или в обобщенном виде (модель EAV):
CREATE TABLE Order_Attributes (
    order_id INT,
    attribute_name VARCHAR(50), -- 'customer_id', 'product_id', 'quantity'
    attribute_value VARCHAR(255),
    PRIMARY KEY (order_id, attribute_name)
);

Когда может применяться:

  • Системы с изменяемой схемой данных (EAV-модель).
  • Хранение временных рядов или телеметрии, где атрибуты добавляются динамически.
  • Теоретические исследования в области проектирования БД.

Практические недостатки:

  • Сложность запросов: Для получения полной записи требуется множество операций JOIN.
  • Падение производительности: Большое количество соединений негативно сказывается на скорости.
  • Избыточность ключей: Первичный ключ дублируется во многих таблицах.

Вывод: На практике 6NF используется крайне редко. 3NF (третья нормальная форма) или BCNF (нормальная форма Бойса-Кодда) являются стандартом, обеспечивающим баланс между устранением аномалий и производительностью.