Ответ
Нормальные формы (НФ) — это набор правил и требований к структуре реляционной базы данных, направленных на устранение избыточности данных и аномалий (проблем при вставке, обновлении и удалении). Нормализация — это процесс приведения таблиц к этим формам.
Основные и наиболее часто используемые нормальные формы:
-
Первая нормальная форма (1НФ)
- Правило: Все атрибуты (столбцы) должны быть атомарными, то есть содержать неделимые значения. В таблице не должно быть повторяющихся групп столбцов.
- Проблема: Невозможность эффективно запрашивать и индексировать составные данные.
- Пример:
- Нарушение: Таблица
Сотрудникисо столбцомТелефоны, содержащим'8-800-..., 8-900-...'. - Решение: Создать отдельную таблицу
Телефоны_Сотрудников(СотрудникID, Телефон).
- Нарушение: Таблица
-
Вторая нормальная форма (2НФ)
- Правило: Таблица должна быть в 1НФ, и все неключевые атрибуты должны полностью зависеть от всего составного первичного ключа (а не от его части).
- Проблема: Избыточность данных и аномалии обновления.
- Пример:
- Нарушение: Таблица
Заказы(OrderID, ProductID, ProductName, Quantity)с первичным ключом(OrderID, ProductID).ProductNameзависит только отProductID, а не от всего ключа. - Решение: Разделить на две таблицы:
Заказы(OrderID, ProductID, Quantity)иПродукты(ProductID, ProductName).
- Нарушение: Таблица
-
Третья нормальная форма (3НФ)
- Правило: Таблица должна быть в 2НФ, и все неключевые атрибуты должны зависеть только от первичного ключа, а не от других неключевых атрибутов (отсутствие транзитивных зависимостей).
- Проблема: Аномалии обновления и удаления.
- Пример:
- Нарушение: Таблица
Сотрудники(EmployeeID, DepartmentName, DepartmentPhone).DepartmentPhoneзависит отDepartmentName, который не является ключом. - Решение: Разделить на
Сотрудники(EmployeeID, DepartmentID)иОтделы(DepartmentID, DepartmentName, DepartmentPhone).
- Нарушение: Таблица
-
Нормальная форма Бойса-Кодда (НФБК/BCNF)
- Это усиленная версия 3НФ. Требует, чтобы любая детерминанта (атрибут, от которого функционально зависят другие) была потенциальным ключом.
На практике для большинства систем достаточно достижения 3НФ, так как это обеспечивает хороший баланс между устранением избыточности и сложностью запросов.