PRO

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

Денормализация — это осознанное добавление избыточности в схему данных ради скорости чтения и простоты запросов. Её применяют, когда нормализованная модель создаёт слишком много JOIN, а цена чтения важнее дополнительной сложности обновлений.
Подробный ответ

Что такое денормализация

Денормализация — это сознательное отступление от строгой нормализации: мы добавляем дублирующие поля, предрассчитанные значения или избыточные таблицы, чтобы ускорить чтение и упростить типовые запросы.

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

Примеры денормализации

  • в таблице orders хранить не только customer_id, но и customer_name, если имя нужно почти в каждом отчёте;

  • хранить агрегаты: orders_count, last_order_date, total_spent вместо пересчёта по миллионам строк на каждом запросе;

  • создавать витрины данных, материализованные представления или отдельные таблицы под отчёты;

  • дублировать справочные данные, если они крайне редко меняются, а читаются очень часто.

Когда её применяют

  • когда система чтения гораздо интенсивнее системы записи;

  • когда типовые запросы слишком дорогие из-за большого количества JOIN и агрегаций;

  • когда нужно ускорить отчёты, дашборды, поисковые выдачи и API с предсказуемыми паттернами доступа;

  • когда бизнес готов платить сложностью обновлений за выигрыш в производительности чтения.

Минусы денормализации

  • данные могут рассинхронизироваться, если забыть обновить все копии значения;

  • логика записи становится сложнее: один бизнес‑акт может требовать обновления нескольких таблиц и агрегатов;

  • возрастает риск ошибок и цена сопровождения;

  • не все денормализации одинаково полезны — иногда лучше индекс, materialized view или кеш, а не дублирование данных.

Как ответить на собеседовании

Денормализация — это намеренное добавление избыточности ради ускорения чтения и упрощения частых запросов. Я бы применял её, когда нормализованная схема слишком дорогая по JOIN и агрегациям, а данные читаются значительно чаще, чем изменяются. При этом важно помнить о риске рассинхронизации и о том, что денормализация должна быть следствием измеренной проблемы, а не «улучшением на всякий случай».

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге