← Назад к вопросам

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

2.0 Middle🔥 201 комментариев
#Архитектура систем#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Основное определение

Денормализация — это процесс намеренного нарушения нормальных форм базы данных (обычно 3NF или выше) путём добавления избыточных данных в таблицы. Это делается для улучшения производительности чтения за счёт увеличения сложности записи и дублирования данных.

Нормализация vs Денормализация

Нормализация (Normalization)

  • Избегаем дублирования данных
  • Каждый факт хранится в одном месте
  • Многочисленные таблицы с отношениями
  • Консистентность и целостность
  • Сложные JOIN операции

Денормализация (Denormalization)

  • Добавляем дублирование для скорости
  • Данные хранятся в нескольких местах
  • Меньше таблиц, но больше данных в каждой
  • Быстрое чтение
  • Сложное обновление

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

1. Сохранение вычисляемых полей Таблица Orders: сохраняем итоговую сумму прямо в заказе вместо подсчёта из LineItems каждый раз.

2. Дублирование информации Таблица Orders: храним имя и email клиента прямо в Orders для быстрого доступа вместо JOIN с таблицей Customers.

3. Хранение агрегированных данных Таблица DailySales: предсчитываем total_sales и order_count вместо подсчёта из Transactions каждый раз.

4. Сохранение истории значений Таблица UserProfile: кэшируем последний вход и количество входов.

Когда применять денормализацию

Показания:

  • Существует узкое место производительности (bottleneck)
  • Много операций чтения, мало операций записи
  • Приложение работает с большим количеством данных
  • Требуется low-latency response для пользователей
  • JOIN операции слишком дорогие

Не применяй:

  • Без измерений и профилирования
  • Если система работает быстро с нормализацией
  • Для систем с частыми обновлениями

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

1. Агрегирование

  • Сохраняем результаты подсчётов (COUNT, SUM, AVG)
  • Обновляем при каждом изменении данных

2. Дублирование данных

  • Копируем часто используемые поля в другие таблицы
  • Требует синхронизации при обновлении

3. Таблицы-выводы

  • Материализованные представления (Materialized Views)
  • Периодически пересчитываются

4. Кэширование в приложении

  • Redis, Memcached
  • Не в базе, но также дублирование

5. Сохранение истории

  • Версионирование данных
  • Хранение снимков состояния

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

Проблемы:

  • Консистентность — нужно обновлять повсюду, риск рассинхронизации
  • Сложность — усложняется логика обновления
  • Место на диске — больше дублирования означает больше места
  • Maintenance — сложнее поддерживать

Решения:

  • Используй триггеры в БД для автоматического обновления
  • Асинхронная синхронизация через очереди сообщений
  • Event Sourcing для отслеживания изменений
  • Регулярные проверки консистентности

Best Practices

  • Профилируй перед денормализацией (найди реальное узкое место)
  • Начни с минимального дублирования
  • Документируй причины денормализации
  • Используй инструменты для синхронизации данных
  • Мониторь стоимость обновления при денормализации
  • Рассмотри альтернативы: индексы, кэширование, архитектурные изменения

Примеры в production

E-commerce платформы:

  • Сохранение цены товара в заказе (не из таблицы Products)
  • Гарантирует исторический прайс

Analytics:

  • Материализованные view с агрегированными данными
  • Кубы OLAP вместо нормализованных таблиц

Social Media:

  • Кэш count комментариев, лайков в основной записи
  • Быстрое отображение метрик

Денормализация — это инструмент для оптимизации, но требует осторожности.

Что такое денормализация БД? | PrepBro