Что такое нормализация и денормализация в SQL

Нормализация и денормализация — это два подхода к организации данных в реляционных базах данных. Они влияют на структуру таблиц, целостность данных и производительность запросов.

Нормализация

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

Основные нормальные формы

Первая нормальная форма (1NF)

Каждое поле содержит только одно атомарное значение, а все строки уникальны.

CREATE TABLE Customers (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    phone VARCHAR(20)
);

Вторая нормальная форма (2NF)

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

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(id)
);

Третья нормальная форма (3NF)

Исключает транзитивные зависимости, когда одно поле зависит не от первичного ключа, а от другого неключевого поля.

CREATE TABLE Employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES Departments(id)
);

Денормализация

Денормализация — это процесс объединения таблиц для уменьшения количества соединений (JOIN) и ускорения запросов. Это увеличивает избыточность данных, но снижает нагрузку на вычисления.

Пример денормализации

Если есть таблицы Customers и Orders, то вместо соединений можно хранить избыточные данные в одной таблице:

CREATE TABLE Orders_Denormalized (
    order_id INT PRIMARY KEY,
    customer_name VARCHAR(100),
    order_date DATE
);

Когда использовать

  • Нормализация — для уменьшения избыточности и обеспечения целостности данных.
  • Денормализация — для повышения производительности чтения в больших системах.