Все ли данные будут объединены в схеме «Снежинка»?

Ответ

Нет, в схеме "Снежинка" (Snowflake Schema) данные не объединены в одну большую таблицу. Это нормализованная версия схемы "Звезда" (Star Schema).

Структура "Снежинки":

  1. Факты (Fact Table): Одна центральная таблица фактов, содержащая количественные показатели (меры) и ключи для связей с измерениями.
  2. Измерения (Dimension Tables): Несколько таблиц измерений, связанных с таблицей фактов.
  3. Ключевая особенность: Таблицы измерений нормализованы. Это означает, что они могут сами ссылаться на другие подчинённые таблицы измерений, образуя иерархическую структуру, которая визуально напоминает снежинку.

Пример для интернет-магазина:

  • Таблица фактов: Sales (содержит sale_id, product_key, customer_key, date_key, amount).
  • Таблица измерения Dim_Product ссылается не напрямую на категорию, а на отдельную таблицу Dim_Category. А Dim_Category, в свою очередь, может ссылаться на Dim_Department.
-- Пример связи в Snowflake Schema
SELECT
    s.amount,
    p.product_name,
    c.category_name,
    d.department_name
FROM fact_sales s
JOIN dim_product p ON s.product_key = p.product_key
JOIN dim_category c ON p.category_key = c.category_key -- Нормализация!
JOIN dim_department d ON c.department_key = d.department_key; -- Нормализация!
Сравнение со "Звездой": Аспект Схема "Звезда" Схема "Снежинка"
Нормализация Денормализована (измерения плоские) Нормализована (измерения иерархичны)
Избыточность данных Высокая (повторы в измерениях) Низкая (данныe об иерархии хранятся один раз)
Сложность запросов Проще (меньше JOIN) Сложнее (больше JOIN из-за нормализации)
Потребление диска Больше Меньше
Оптимальна для Частых аналитических запросов, где важна скорость Сценариев с жёсткими требованиями к целостности данных и экономии дискового пространства

Итог: "Снежинка" не объединяет, а, наоборот, разделяет (нормализует) данные по иерархиям для уменьшения избыточности, что может усложнить запросы, но экономит место и упрощает поддержку целостности.

Ответ 18+ 🔞

Да ты что, серьёзно думал, что в "Снежинке" всё в одну кучу сгребают? Да ни хуя подобного! Это же, блядь, нормализованная версия "Звезды", ядрёна вошь. Совсем другая песня.

Как там устроено, ёпта:

  1. Таблица фактов (Fact Table): Одна-единственная, в самом центре. Там циферки всякие лежат и ключики, чтобы цепляться к измерениям.
  2. Измерения (Dimension Tables): Их несколько, они вокруг фактов крутятся.
  3. Фишка вся в чём: А в том, что эти самые таблицы измерений — нормализованные до упора. Они могут сами тыкать пальцем в другие, подчинённые таблицы, и получается такая иерархическая структура, которая на снежинку смахивает. Не звезда, а ёперный театр какая-то.

Пример, чтобы совсем понятно стало (допустим, магазин онлайн):

  • Факты: Таблица Sales (тут sale_id, product_key, customer_key, date_key, amount — выручка).
  • А вот измерение Dim_Product ссылается уже не просто на категорию внутри себя, а на отдельную таблицу Dim_Category. А та, глядишь, ткнёт ещё и в Dim_Department. И пошло-поехало.
-- Вот как запрос в "Снежинке" выглядит, представляешь?
SELECT
    s.amount,
    p.product_name,
    c.category_name,
    d.department_name
FROM fact_sales s
JOIN dim_product p ON s.product_key = p.product_key
JOIN dim_category c ON p.category_key = c.category_key -- Нормализация, мать её!
JOIN dim_department d ON c.department_key = d.department_key; -- И опять!

А теперь давай на пальцах, чем "Снежинка" от "Звезды" отличается:

Штука Схема "Звезда" Схема "Снежинка"
Нормализация Денормализована (всё плоское, как доска) Нормализована (иерархии, как в хорошем справочнике)
Повторы данных Овердохуища (одно и то же в измерениях копируется) Мало (про каждую ступеньку иерархии пишут один раз)
Запросы Проще (джойнов меньше) Сложнее (джойнов больше, потому что по иерархии шастаешь)
Место на диске Жрёт больше Жрёт меньше
Когда юзать Когда скорость аналитических запросов критична Когда надо место экономить и чтобы целостность данных была на высоте

Короче, вывод: "Снежинка" не объединяет, а, наоборот, дробит и упорядочивает данные по иерархиям, чтобы дублей не было. Запросы, может, и сложнее станут, но зато место сэкономишь и с целостностью данных не будет проблем — всё по полочкам.