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