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

«Что такое третья нормальная форма (3NF) в базах данных?» — вопрос из категории Базы данных, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Третья нормальная форма (3NF) — это правило проектирования реляционных баз данных, направленное на устранение избыточности данных и аномалий при обновлении. Таблица находится в 3NF, если:

  1. Она находится во второй нормальной форме (2NF) (все неключевые атрибуты полностью зависят от первичного ключа).
  2. Отсутствуют транзитивные зависимости: ни один неключевой атрибут не зависит от другого неключевого атрибута. Каждый неключевой атрибут должен зависеть только от первичного ключа.
Пример нарушения 3NF: Допустим, у нас есть таблица Заказы (Orders): OrderID (PK) CustomerID CustomerName CustomerEmail
1 101 Иван Петров ivan@example.com
2 101 Иван Петров ivan@example.com
3 102 Мария Сидорова maria@example.com

Здесь CustomerName и CustomerEmail зависят не от OrderID, а от CustomerID. Это транзитивная зависимость. При смене email клиента пришлось бы обновлять все его заказы, что ведет к аномалии обновления и избыточности.

Приведение к 3NF: Нужно разделить таблицу, вынеся информацию о клиенте в отдельную сущность.

Таблица Заказы (Orders): OrderID (PK) CustomerID (FK)
1 101
2 101
3 102
Таблица Клиенты (Customers): CustomerID (PK) CustomerName CustomerEmail
101 Иван Петров ivan@example.com
102 Мария Сидорова maria@example.com

Теперь данные о клиенте хранятся в одном месте. В контексте Node.js при работе, например, с ORM Sequelize, это будет отражено в двух связанных моделях с отношением hasMany / belongsTo.