Короткий ответ
«Звезда» оптимизирует модель для простых аналитических запросов, а «снежинка» уменьшает дублирование внутри измерений ценой дополнительных соединений.
Как это работает подробнее
В звезде атрибут категории хранится рядом с товаром. В снежинке товар содержит ключ категории, а её название и иерархия вынесены в отдельное измерение.
- Звезда. Меньше
JOIN, понятнее модель для BI и аналитиков. - Снежинка. Меньше дублирования и удобнее централизованно поддерживать большие иерархии.
Пример кода
products_by_category.sql
SELECT c.category_name, COUNT(*) AS product_count
FROM dim_product AS p
JOIN dim_category AS c ON c.category_id = p.category_id
GROUP BY c.category_name;Что использовать на практике
- Выбирайте звезду по умолчанию для пользовательских витрин.
- Нормализуйте измерение, если справочник велик, часто меняется или имеет общую многоуровневую иерархию.
Подводные камни
- Нормализация ради нормализации. Маленькие статичные справочники редко окупают усложнение запросов.
- Неоднозначные связи. Ошибки в ключах между уровнями иерархии могут размножить строки.