Ответ
В контексте хранилищ данных (DWH) я в основном работаю с двумя классическими моделями:
-
Снежинка (Snowflake Schema):
- Это нормализованная версия звезды. Центральная таблица фактов связана с таблицами измерений, которые, в свою очередь, могут иметь свои нормализованные под-измерения (таблицы-справочники).
- Плюсы: Экономия дискового пространства за счет устранения избыточности данных, более простая поддержка целостности.
- Минусы: Более сложные запросы с большим количеством JOIN, что может снижать производительность для аналитиков.
- Когда использовать: Когда приоритетом является эффективное хранение и минимизация избыточности, а сложность запросов приемлема.
-
Звезда (Star Schema):
- Наиболее распространенная и простая модель. В центре находится таблица фактов с числовыми метриками (мерностями), окруженная денормализованными таблицами измерений с описательными атрибутами.
- Плюсы: Высокая производительность запросов благодаря минимуму JOIN, простота для понимания и использования аналитиками.
- Минусы: Избыточность данных и потенциальные аномалии обновления из-за денормализации.
- Когда использовать: Когда ключевой приоритет — скорость выполнения аналитических запросов и простота для конечных пользователей.
Выбор между ними — это компромисс между производительностью запросов («Звезда») и эффективностью хранения/гибкостью («Снежинка»). В большинстве проектов я начинаю со «Звезды» и нормализую до «Снежинки» только те измерения, где это критично для экономии места.