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

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

Ответ

Третья нормальная форма (3NF) — это правило проектирования реляционных баз данных, направленное на устранение транзитивных зависимостей и избыточности данных. Таблица находится в 3NF, если:

  1. Она находится во второй нормальной форме (2NF) (нет частичных зависимостей неключевых атрибутов от составного ключа).
  2. Все неключевые атрибуты зависят ТОЛЬКО от первичного ключа, а не друг от друга (нет транзитивных зависимостей).

Пример нарушения 3NF: В таблице Заказы атрибут ИмяЗаказчика зависит не от первичного ключа ID_Заказа, а от другого неключевого атрибута ID_Клиента.

-- НЕ в 3NF
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    CustomerName VARCHAR(100), -- Зависит от CustomerID, а не от OrderID!
    OrderDate DATE
);
-- Проблема: при смене имени клиента нужно обновлять все его заказы.

Исправление (приведение к 3NF): Необходимо вынести транзитивно зависимые атрибуты в отдельную таблицу.

-- Таблица Customers (отдельная сущность)
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    CustomerName VARCHAR(100) NOT NULL
);

-- Таблица Orders (ссылается на Customers)
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT NOT NULL,
    OrderDate DATE NOT NULL,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

Преимущества 3NF:

  • Устранение аномалий обновления: Имя клиента хранится в одном месте.
  • Сокращение избыточности: Данные не дублируются.
  • Упрощение поддержки: Структура становится более логичной и гибкой.