Перейти к содержимому
2 / 15

Нормализация и денормализация: когда нужно дублировать данные, а когда нет?

Нормализация — хранить каждый факт ровно в одном месте. Это дефолт: обновление в одной строке, невозможность рассогласования, компактная запись. Платите join'ами на чтение. Денормализация — намеренно продублировать данные ради чтения: счётчик комментариев в самой записи, имя автора рядом с постом, готовая витрина под тяжёлый отчёт. Платите тем, что у одного факта появляется два владельца и они могут разъехаться. Практическое правило: нормализуйте по умолчанию, денормализуйте точечно и только после того, как измерили конкретный медленный запрос, — и вместе с дублем всегда планируйте, кто и как его обновляет и чем чинится расхождение. Отдельный случай — исторические данные: цена в заказе копируется не ради скорости, а потому что это другой факт, чем текущая цена товара.

Нормализация и денормализация: когда нужно дублировать данные, а когда нет? | JScriptiser