Ответ
Нормализация — это процесс структурирования реляционной базы данных для минимизации избыточности данных и устранения потенциальных аномалий (ошибок при вставке, обновлении или удалении данных).
Основные цели нормализации:
- Устранение дублирования данных: Каждый факт хранится только в одном месте.
- Обеспечение целостности данных: Предотвращение противоречивых данных в базе.
- Упрощение структуры БД: Создание логически понятных и легко поддерживаемых таблиц.
Процесс нормализации описывается через нормальные формы (НФ). Наиболее часто используются первые три:
-
Первая нормальная форма (1НФ):
- Все атрибуты (колонки) должны быть атомарными (неделимыми).
- В таблице не должно быть повторяющихся групп столбцов.
-
Вторая нормальная форма (2НФ):
- Таблица находится в 1НФ.
- Все неключевые атрибуты полностью функционально зависимы от первичного ключа (актуально для составных ключей).
-
Третья нормальная форма (3НФ):
- Таблица находится в 2НФ.
- Отсутствуют транзитивные зависимости (когда неключевой атрибут зависит от другого неключевого атрибута).
Практический пример
До нормализации (нарушение 1НФ и 3НФ):
Одна таблица Orders
со всеми данными.
OrderID | CustomerName | CustomerAddress | Products (список) |
---|---|---|---|
101 | Иван Петров | ул. Ленина, 10 | "Ноутбук, Мышь" |
102 | Анна Сидорова | пр. Мира, 5 | "Клавиатура" |
Проблемы: поле Products
неатомарно, CustomerAddress
зависит от CustomerName
, а не от OrderID
(транзитивная зависимость).
После нормализации (3НФ): Данные разделены на три логические таблицы.
Таблица Customers |
CustomerID | CustomerName | CustomerAddress |
---|---|---|---|
1 | Иван Петров | ул. Ленина, 10 | |
2 | Анна Сидорова | пр. Мира, 5 |
Таблица Orders |
OrderID | CustomerID (FK) |
---|---|---|
101 | 1 | |
102 | 2 |
Таблица OrderItems |
OrderItemID | OrderID (FK) | ProductName |
---|---|---|---|
1 | 101 | "Ноутбук" | |
2 | 101 | "Мышь" | |
3 | 102 | "Клавиатура" |
Такая структура устраняет избыточность и аномалии, делая базу данных надежной и масштабируемой.