middle
Что такое денормализация и для чего она применяется?
Денормализация — осознанное внесение избыточности в структуру базы данных (отступление от нормальных форм) с целью повышения производительности чтения за счёт сокращения количества JOIN.
Аналогия из жизни: денормализация — это как написать шпаргалку. Информация дублируется, но при необходимости вы находите ответ мгновенно, не листая учебник.
Когда применяется денормализация
- Частые сложные запросы с множеством JOIN тормозят систему
- Данные читаются значительно чаще, чем обновляются (read-heavy нагрузка)
- Нужна быстрая аналитика и отчёты (OLAP)
- Построение материализованных представлений (materialized views)
Приёмы денормализации
| Приём | Описание | Пример |
|---|---|---|
| Дублирование атрибутов | Копирование поля из связанной таблицы | Хранение user_name в таблице orders |
| Предвычисленные агрегаты | Хранение результатов вычислений | Поле total_orders в таблице users |
| Объединение таблиц | Слияние часто соединяемых таблиц в одну | Объединение orders и order_items |
| Материализованные представления | Сохранённый результат запроса | CREATE MATERIALIZED VIEW |
Компромиссы
| Нормализация | Денормализация |
|---|---|
| Минимум избыточности | Избыточные данные |
| Целостность обеспечена структурой | Целостность на уровне приложения |
| Медленное чтение (JOIN) | Быстрое чтение |
| Быстрая запись | Медленная запись (обновление копий) |
| OLTP | OLAP |
На собеседовании: интервьюер хочет услышать, что денормализация — это осознанный компромисс, а не «плохой дизайн». Важно объяснить, в каких конкретно ситуациях она оправдана. Частая ошибка — не упомянуть, что при денормализации ответственность за целостность данных ложится на приложение.