Что такое нормализация и когда оправдана денормализация?
- Зачем нормализовать базу данных?
- Когда денормализация оправдана?
Нормализация — каждый факт хранится в одном месте: нет дублей, а значит нет аномалий обновления. Денормализация — сознательное дублирование ради быстрого чтения.
- Аномалии без нормализации: обновили адрес в одной строке, в другой остался старый
- Денормализуют, когда чтение доминирует и JOIN дороги: счётчики, витрины, модели чтения
- Цена денормализации — синхронизация копий (триггеры, события, пересчёт)
А ещё Начинают с нормализованной схемы, денормализуют точечно по измерениям
Подробно
Нормализация — разбиение данных так, чтобы каждый факт хранился один раз. Если имя клиента записано в каждой строке заказа, то при смене имени нужно обновить тысячи строк, а пропущенная строка создаёт противоречие — аномалия обновления. Есть и аномалии вставки (нельзя завести клиента без заказа) и удаления (удалив последний заказ, теряем клиента). Нормальные формы (1НФ–3НФ, НФБК) формализуют правила.
Плюсы: целостность, компактность, простые изменения, гибкость для новых запросов.
Денормализация — дублирование ради чтения:
- хранить
order.total, а не считать сумму позиций при каждом показе; - счётчик комментариев в посте;
- имя автора в документе поиска;
- модели чтения в CQRS, витрины в аналитике, колоночные хранилища.
Когда оправдана: чтение намного чаще записи, JOIN и агрегаты стали узким местом по измерениям, данные меняются редко или допустима задержка.
Цена: копии нужно синхронизировать — в той же транзакции, триггерами, событиями или периодическим пересчётом, и следить за расхождениями.
Что хотят услышать
- Цель нормализации и примеры аномалий.
- Когда и зачем денормализуют, с примерами.
- Цена денормализации и способы синхронизации.
Частые ошибки
- Денормализовать заранее «для скорости» без измерений.
- Хранить производные данные без механизма их обновления.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Нормализация ускоряет чтение, денормализация защищает от аномалий обновления
- ✗Денормализация нужна всегда, когда в запросе больше двух JOIN
- ✓Нормализация хранит каждый факт в одном месте; денормализация — осознанные копии ради чтения, которые надо синхронизировать
- ✗Нормализация — это приведение данных к одной кодировке и одному формату дат во всех таблицах
Что спросят дальше
- Что такое 3NF простыми словами?
- Как поддерживать согласованность денормализованных данных?
Разбор темы
- Моделирование данных и целостность
Ключи и constraints, нормальные формы простыми словами, осознанная денормализация и каскадные действия.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.