Денормализация — это намеренное добавление избыточности в нормализованную базу данных.
Основные цели денормализации:
- Повышение производительности: Снижение количества соединений таблиц (JOINs), что ускоряет выполнение запросов чтения.
- Упрощение запросов: Меньшее количество таблиц для извлечения данных.
Недостатки денормализации:
- Избыточность данных: Одинаковые данные могут храниться в разных местах, что занимает больше места.
- Сложность обновления: Изменение данных требует обновления в нескольких местах, что увеличивает риск несогласованности.
- Нарушение целостности: Отсутствие централизованного хранения данных усложняет поддержание их целостности.
Типичные сценарии применения:
- Формирование отчетов: Когда нужны сводные данные, объединяющие информацию из разных таблиц.
- Часто читаемые данные: Для данных, которые очень часто запрашиваются и редко изменяются.
- Данные с иерархической структурой: Плоское представление иерархии.
Техники денормализации:
- Дублирование колонок: Копирование колонок из одной таблицы в другую.
- Предагрегация: Хранение предварительно рассчитанных агрегированных значений.
- Создание служебных таблиц: Таблицы, хранящие данные, полученные в результате объединения или вычисления.
- Сохранение истории: Хранение исторических данных в той же таблице, что и текущие, без нормализации по времени.
Денормализация применяется, когда производительность чтения критична, даже ценой усложнения операций записи и риска избыточности. Важно тщательно анализировать потребности приложения и компромиссы перед применением денормализации.