Нормализация базы данных — это процесс организации данных в реляционной базе для минимизации избыточности и аномалий при вставке, обновлении и удалении данных. Это многоэтапный метод проектирования базы данных, который следует определенным правилам (нормальным формам).
Устранение избыточности данных
Каждый факт должен храниться только в одном месте
Предотвращение аномалий
Обеспечение логической целостности
Четкие связи между таблицами через ключи
Пример нарушения:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_name VARCHAR(100),
products VARCHAR(500) -- Список товаров через запятую (нарушение 1NF)
);
Исправленный вариант:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
CREATE TABLE order_items (
order_item_id INT PRIMARY KEY,
order_id INT,
product_id INT,
quantity INT,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
Пример нарушения:
CREATE TABLE order_items (
order_id INT,
product_id INT,
product_name VARCHAR(100), -- Зависит только от product_id
quantity INT,
PRIMARY KEY (order_id, product_id)
);
Пример нарушения:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
dept_name VARCHAR(100), -- Зависит от dept_id, а не от emp_id
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
В некоторых случаях (особенно для аналитических систем) применяют осознанную денормализацию для повышения производительности за счет:
Пример денормализации:
CREATE TABLE order_summary (
order_id INT PRIMARY KEY,
customer_name VARCHAR(100), -- Дублируем из customers
total_amount DECIMAL(10,2), -- Вычисляемое поле
item_count INT -- Вычисляемое поле
);
Резюмируем: нормализация — это фундаментальный процесс проектирования реляционных баз данных, который обеспечивает целостность данных и устраняет аномалии. Хотя полная нормализация не всегда практична, понимание нормальных форм позволяет принимать осознанные решения о структуре базы данных.