Ответ
Нормальная форма (НФ) — это определённый набор правил или критериев, которым должна удовлетворять структура таблицы в реляционной базе данных. Цель соблюдения этих правил — устранение избыточности данных и аномалий, связанных с их модификацией.
Каждая последующая нормальная форма включает требования предыдущих и добавляет новые, более строгие ограничения.
Краткий обзор ключевых нормальных форм:
| НФ | Требование | Простая проверка |
|---|---|---|
| 1NF | Атомарность атрибутов, отсутствие повторяющихся групп. | Все ли значения в столбцах неделимы? Нет ли списков или массивов в одной ячейке? |
| 2NF | Находится в 1NF. Нет частичных зависимостей неключевых атрибутов от составного первичного ключа. | Если PK составной, зависит ли каждый неключевой атрибут от ВСЕХ частей PK, а не от какой-то одной? |
| 3NF | Находится в 2NF. Нет транзитивных зависимостей (неключевые атрибуты зависят только от PK, а не друг от друга). | Можно ли вывести значение одного неключевого атрибута из другого неключевого? Если да — нарушение 3NF. |
| BCNF (Бойса-Кодда) | Усиленная 3NF. Каждый детерминант (атрибут, от которого функционально зависит другой атрибут) должен быть потенциальным ключом. | Для всех зависимостей X → Y, является ли X суперключом? |
Практический пример нарушения 1NF и его исправление:
-- Нарушение 1NF: столбец 'Phones' содержит составные данные (список).
CREATE TABLE Customer (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100),
Phones VARCHAR(200) -- Например: '+79161234567, +74951234567'
);
-- Соответствие 1NF: каждый телефон на отдельной строке.
CREATE TABLE Customer (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE CustomerPhone (
CustomerID INT,
PhoneNumber VARCHAR(20),
PRIMARY KEY (CustomerID, PhoneNumber),
FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
);
Следование нормальным формам — фундамент для создания устойчивых, легко поддерживаемых и масштабируемых схем данных.