Ответ
Нормализация — это процесс структурирования реляционной базы данных для уменьшения избыточности данных и улучшения их целостности. Основная цель — разбить большие таблицы на более мелкие и четко определенные, установив между ними связи.
Ключевые цели:
- Устранение избыточности данных: Каждый фрагмент данных хранится только в одном месте, что экономит пространство и упрощает обновление.
- Предотвращение аномалий данных: Исключаются проблемы при вставке, обновлении и удалении данных. Например, при изменении адреса клиента не нужно обновлять его в каждой записи о заказе.
- Обеспечение логической целостности: Данные организованы в логические группы (сущности), что делает схему БД более понятной и простой в обслуживании.
Пример (до и после 1НФ и 2НФ):
До нормализации (одна таблица):
-- Избыточность: имя и адрес клиента повторяются для каждого заказа
-- Аномалия обновления: для смены адреса клиента нужно обновить несколько строк
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_name VARCHAR(100),
customer_address VARCHAR(255),
product_name VARCHAR(100),
quantity INT
);
После нормализации:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
address VARCHAR(255)
);
CREATE TABLE Products (
product_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
product_id INT,
quantity INT,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id),
FOREIGN KEY (product_id) REFERENCES Products(product_id)
);
Чаще всего на практике базы данных приводят к третьей нормальной форме (3НФ), так как она обеспечивает хороший баланс между устранением избыточности и сложностью запросов. В некоторых случаях для повышения производительности чтения намеренно применяют денормализацию.