Получить доступ

Что такое нормализация и когда оправдана денормализация?

MiddleМоделирование данныхSQL
Ещё спрашивают так:
  • Зачем нормализовать базу данных?
  • Когда денормализация оправдана?
Коротко

Нормализация — каждый факт хранится в одном месте: нет дублей, а значит нет аномалий обновления. Денормализация — сознательное дублирование ради быстрого чтения.

  • Аномалии без нормализации: обновили адрес в одной строке, в другой остался старый
  • Денормализуют, когда чтение доминирует и JOIN дороги: счётчики, витрины, модели чтения
  • Цена денормализации — синхронизация копий (триггеры, события, пересчёт)

А ещё Начинают с нормализованной схемы, денормализуют точечно по измерениям

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Нормализация — разбиение данных так, чтобы каждый факт хранился один раз. Если имя клиента записано в каждой строке заказа, то при смене имени нужно обновить тысячи строк, а пропущенная строка создаёт противоречие — аномалия обновления. Есть и аномалии вставки (нельзя завести клиента без заказа) и удаления (удалив последний заказ, теряем клиента). Нормальные формы (1НФ–3НФ, НФБК) формализуют правила.

Плюсы: целостность, компактность, простые изменения, гибкость для новых запросов.

Денормализация — дублирование ради чтения:

  • хранить order.total, а не считать сумму позиций при каждом показе;
  • счётчик комментариев в посте;
  • имя автора в документе поиска;
  • модели чтения в CQRS, витрины в аналитике, колоночные хранилища.

Когда оправдана: чтение намного чаще записи, JOIN и агрегаты стали узким местом по измерениям, данные меняются редко или допустима задержка.

Цена: копии нужно синхронизировать — в той же транзакции, триггерами, событиями или периодическим пересчётом, и следить за расхождениями.

Что хотят услышать

  • Цель нормализации и примеры аномалий.
  • Когда и зачем денормализуют, с примерами.
  • Цена денормализации и способы синхронизации.

Частые ошибки

  • Денормализовать заранее «для скорости» без измерений.
  • Хранить производные данные без механизма их обновления.

Что спросят дальше

  • Что такое 3NF простыми словами?
  • Как поддерживать согласованность денормализованных данных?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем