Перейти к основному содержимому

Денормализация в БД

Ранее мы рассказывали про нормализацию в БД, рассмотрим обратный процесс.

Денормализация — внесение избыточности в БД путём объединения таблиц, чтобы упростить структуру и ускорить чтения данных.

Отличие от нормализации

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

Денормализация, наоборот, вводит избыточность обратно в БД, объединяя таблицы и дублируя информацию. Запросы становятся проще, операции чтения быстрее, но могут возникнуть трудности с поддержкой и обновлением из-за риска несогласованности.

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

  • Для ускорения чтения данных за счет сокращения количества джойнов.
  • В системах с большим объемом операций чтения и минимальным количеством обновлений, где производительность чтения критична.
  • Для ускорения разработки и оптимизации работы приложений.

Методы

  • Добавление избыточных данных: дублирование данных в нескольких таблицах для сокращения соединений при запросах.
  • Добавление производных или агрегированных столбцов: включение полей с предварительно вычисленными значениями, например, общей суммы заказа.
  • Объединение таблиц: слияние смежных таблиц в одну для уменьшения операций соединения.
  • Денормализация иерархических структур: дублирование информации о верхних уровнях иерархии на нижних для упрощения запросов.
  • Использование материализованных представлений: хранение результатов сложных запросов в виде отдельной таблицы для быстрого доступа.
  • Введение таблиц сумм и счётчиков: создание отдельных таблиц для хранения суммарной информации, например, общее количество товаров, проданных за день, или общее количество посетителей сайта.

Примеры

  • Агрегация данных: в таблице заказов хранится не только идентификатор клиента, но и агрегированная информация о клиенте, например, общая сумма покупок. Это избавляет от необходимости соединять таблицы заказов и клиентов для расчета общих покупок клиента.
  • Кэширование результатов запросов: в таблице с продуктами может храниться не только информация о продукте, но и предварительно рассчитанное количество продуктов на складе. Это снижает нагрузку на СУБД за счет уменьшения количества вычислений при каждом запросе.

Недостатки

  • Избыточность данных может привести к проблемам с их согласованностью, когда изменение информации в одном месте потребует её обновления и во всех остальных денормализованных таблицах. Это увеличивает сложность поддержки и может привести к ошибкам.
  • Увеличивается объём хранимых данных.
  • Замедление других операций, может замедлить процессы вставки, изменения и удаления данных.

Совет

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

Денормализация в других областях

  • Data Warehouse: улучшает производительность аналитических запросов через агрегированные структуры данных для быстрого выполнения запросов OLAP.
  • NoSQL базы данных: для оптимизации горизонтального масштабирования и ускорения доступа к данным, храня связанные данные вместе.
  • Frontend-разработка: при проектировании состояния приложений, например в Redux для React, для упрощения доступа к данным и улучшения производительности.
  • Микросервисы: улучшает независимость и отказоустойчивость сервисов, храня данные, необходимые каждому микросервису в его собственной базе.

Подборка материалов

  1. Зачем нужна денормализация, когда использовать, пример
  2. Три нормальных формы, нормализация и денормализация БД
  3. Денормализациия и Нормализация
  4. Денормализация таблиц в БД
  5. Денормализация методом слияния таблиц
  6. Денормализация и НФ
  7. Selectel: Денормализация
  8. Принятие решения о денормализации Oracle
  9. Разница между нормализацией и денормализацией
  10. Как нормализовать данные
  11. Денормализация — это зло?
  12. Базы данных: большой обзор типов и подходов. Доклад Яндекса (видео)
  13. Обратная нормализация (денормализация)
  14. Денормализация баз данных ERP-систем и ее влияние на развитие ПО: открываем таверну на Тортуге
  15. Моделирование и проектирование данных — конспект главы 5 DAMA DMBOK2 (на русском языке)

Видео

  1. SQL нормализация и денормализация
  2. Проектирование БД: От NF к денормализации
  3. Нормализация и Денормализация
  4. Normalization vs. Denormalization | Events and Event Streaming

Книги

  1. К. Ричардсон - "Микросервисы: паттерны и принципы" (содержит главу о денормализации в микросервисах)