JOIN, а цена чтения важнее дополнительной сложности обновлений.
Что такое денормализация и когда её применяют?
Подробный ответ
Что такое денормализация
Денормализация — это сознательное отступление от строгой нормализации: мы добавляем дублирующие поля, предрассчитанные значения или избыточные таблицы, чтобы ускорить чтение и упростить типовые запросы.
Идея простая: нормализация снижает дублирование и защищает от аномалий, а денормализация делает наоборот — слегка увеличивает дублирование, но может сильно уменьшить число JOIN и количество вычислений на лету.
Примеры денормализации
в таблице
ordersхранить не толькоcustomer_id, но иcustomer_name, если имя нужно почти в каждом отчёте;хранить агрегаты:
orders_count,last_order_date,total_spentвместо пересчёта по миллионам строк на каждом запросе;создавать витрины данных, материализованные представления или отдельные таблицы под отчёты;
дублировать справочные данные, если они крайне редко меняются, а читаются очень часто.
Когда её применяют
когда система чтения гораздо интенсивнее системы записи;
когда типовые запросы слишком дорогие из-за большого количества
JOINи агрегаций;когда нужно ускорить отчёты, дашборды, поисковые выдачи и API с предсказуемыми паттернами доступа;
когда бизнес готов платить сложностью обновлений за выигрыш в производительности чтения.
Минусы денормализации
данные могут рассинхронизироваться, если забыть обновить все копии значения;
логика записи становится сложнее: один бизнес‑акт может требовать обновления нескольких таблиц и агрегатов;
возрастает риск ошибок и цена сопровождения;
не все денормализации одинаково полезны — иногда лучше индекс, materialized view или кеш, а не дублирование данных.
Как ответить на собеседовании
Денормализация — это намеренное добавление избыточности ради ускорения чтения и упрощения частых запросов. Я бы применял её, когда нормализованная схема слишком дорогая по JOIN и агрегациям, а данные читаются значительно чаще, чем изменяются. При этом важно помнить о риске рассинхронизации и о том, что денормализация должна быть следствием измеренной проблемы, а не «улучшением на всякий случай».
Оцени свой прогресс