ENIGMA AI
ENIGMA AI
Database Средний

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

Нормализация базы данных

Зачем нужна:

  • Устранение избыточности данных
  • Предотвращение аномалий (insert, update, delete)
  • Обеспечение целостности

Первая нормальная форма (1NF):

Требования:

  • Атомарные значения (нет массивов/списков в ячейках)
  • Уникальные строки
  • Один тип данных в столбце
❌ НЕ 1NF:
| id | name  | phones              |
|----|-------|---------------------|
| 1  | Alice | 111-111, 222-222    |

✅ 1NF:
| id | name  | phone   |
|----|-------|---------|
| 1  | Alice | 111-111 |
| 1  | Alice | 222-222 |

Вторая нормальная форма (2NF):

Требования:

  • 1NF +
  • Все неключевые атрибуты зависят от всего первичного ключа
❌ НЕ 2NF (составной ключ order_id, product_id):
| order_id | product_id | product_name | quantity |
|----------|------------|--------------|----------|
| 1        | 100        | Apple        | 5        |

product_name зависит только от product_id!

✅ 2NF:
Orders: | order_id | product_id | quantity |
Products: | product_id | product_name |

Третья нормальная форма (3NF):

Требования:

  • 2NF +
  • Нет транзитивных зависимостей
❌ НЕ 3NF:
| employee_id | department_id | department_name |
|-------------|---------------|-----------------|

department_name зависит от department_id, а не от employee_id

✅ 3NF:
Employees: | employee_id | department_id |
Departments: | department_id | department_name |

Нормальная форма Бойса-Кодда (BCNF):

  • Более строгая версия 3NF
  • Каждая детерминанта — кандидат в ключи

Когда денормализовать:

  • Производительность чтения важнее записи
  • Отчёты и аналитика — много JOIN
  • Кэширование — предвычисленные данные
-- Денормализация для производительности
CREATE TABLE orders_denormalized (
    order_id INT,
    customer_name VARCHAR(100),  -- Дублирование
    total_amount DECIMAL(10,2)   -- Предвычислено
);

Уровни нормализации:

НФ Устраняет
1NF Повторяющиеся группы
2NF Частичные зависимости
3NF Транзитивные зависимости
BCNF Все зависимости от не-ключей

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы