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