Нормализация — разбиение данных так, чтобы каждый факт хранился один раз. Если имя клиента записано в каждой строке заказа, то при смене имени нужно обновить тысячи строк, а пропущенная строка создаёт противоречие — аномалия обновления. Есть и аномалии вставки (нельзя завести клиента без заказа) и удаления (удалив последний заказ, теряем клиента). Нормальные формы (1НФ–3НФ, НФБК) формализуют правила.
Плюсы: целостность, компактность, простые изменения, гибкость для новых запросов.
Денормализация — дублирование ради чтения:
- хранить
order.total, а не считать сумму позиций при каждом показе; - счётчик комментариев в посте;
- имя автора в документе поиска;
- модели чтения в CQRS, витрины в аналитике, колоночные хранилища.
Когда оправдана: чтение намного чаще записи, JOIN и агрегаты стали узким местом по измерениям, данные меняются редко или допустима задержка.
Цена: копии нужно синхронизировать — в той же транзакции, триггерами, событиями или периодическим пересчётом, и следить за расхождениями.