В какой момент нормализация по сравнению со звездой помогает производительности?
Допустим, у меня есть система заказов, которая имеет размер таблицы около 50000 строк и увеличивается примерно на 100 строк в день. Кроме того, скажем, после размещения заказа мне нужно хранить метрики об этом заказе в течение следующих 30 дней и ежедневно отчитываться по этим метрикам (т. Е. На второй день этот ордер имел X активаций и Y деактиваций).
- 1 таблица названных продуктов, которая содержит данные о списке товаров
- 1 таблица заказов, которая содержит данные заказа и идентификатор продукта
- 1 таблица, называемая метрикой, которая содержит поле даты, идентификатор заказа и связанные метрики.
Если бы я смоделировал это в формате схемы звезды, я бы спроектировал так:
- Таблица FactOrders, которая имеет 30 дней * X, упорядочивает строки и сохраняет все метаданные вокруг заказов, идентификатора продукта и метрик (каждая строка представляет метрики продукта в определенный день).
- Таблица DimProducts, в которой хранятся метаданные продукта
Приводит ли мое повышение производительности от огромной таблицы FactOrders только к одному объединению, чтобы получить всю необходимую информацию, перевешивает тот факт, что я увеличил размер таблицы в 30 раз и получил невероятное количество повторных данных, по сравнению с действительно нормализованной моделью, которая имеет одно дополнительное объединение, но намного меньшие таблицы? Или я проектирую это неправильно для формата звезды?
1 ответ
Не денормализуйте что-то такое маленькое, чтобы избавиться от соединений. Индексируйте правильно вместо этого. Объединения не плохие, объединения хорошие. Базы данных предназначены для их использования.
Денормализация сопряжена с риском для целостности данных и может даже не быть быстрой из-за гораздо более широкого размера таблиц. В таблицах таких крошечных, очень маловероятно, что денормализация поможет.