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 — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно