Нормализация и денормализация — это два подхода к организации данных в реляционных базах данных. Они влияют на структуру таблиц, целостность данных и производительность запросов.
Нормализация
Нормализация — это процесс разбиения таблиц на более мелкие, чтобы минимизировать избыточность данных и избежать аномалий при обновлении. Для этого используются нормальные формы (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
);
Когда использовать
- Нормализация — для уменьшения избыточности и обеспечения целостности данных.
- Денормализация — для повышения производительности чтения в больших системах.