Что такое нормальная форма в контексте баз данных?

«Что такое нормальная форма в контексте баз данных?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нормальная форма (НФ) — это определённый набор правил или критериев, которым должна удовлетворять структура таблицы в реляционной базе данных. Цель соблюдения этих правил — устранение избыточности данных и аномалий, связанных с их модификацией.

Каждая последующая нормальная форма включает требования предыдущих и добавляет новые, более строгие ограничения.

Краткий обзор ключевых нормальных форм:

НФ Требование Простая проверка
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)
);

Следование нормальным формам — фундамент для создания устойчивых, легко поддерживаемых и масштабируемых схем данных.