Открыть сервис

Схема снежинка

Схема снежинка — это модель организации данных в хранилищах данных и системах бизнес-аналитики, представляющая собой расширение схемы «звезда». В схеме «снежинка» таблицы измерений (dimension tables) нормализованы, то есть разбиты на несколько связанных таблиц, образующих иерархическую структуру, напоминающую кристалл снежинки. Это позволяет уменьшить избыточность данных и упростить их поддержку, но может усложнить выполнение запросов и снизить производительность.

История и происхождение

Концепция схемы «снежинка» возникла в 1990-х годах как развитие идей Ральфа Кимбалла, одного из пионеров в области проектирования хранилищ данных. Кимбалл в своей книге «The Data Warehouse Toolkit» (1996) описал схему «звезда» как базовую модель для многомерного анализа, где центральная таблица фактов окружена денормализованными таблицами измерений. Однако для сложных иерархий и больших объёмов данных такая структура приводила к избыточности: одни и те же атрибуты (например, название города или категории товара) повторялись в каждой записи таблицы измерений.

Для решения этой проблемы была предложена нормализация таблиц измерений — разбиение их на подтаблицы, связанные внешними ключами. Такой подход получил название «снежинка» из-за визуального сходства с кристаллом снега: центральная таблица фактов, а от неё расходятся «лучи» измерений, которые, в свою очередь, ветвятся на более мелкие таблицы.

Структура и принципы

Схема «снежинка» базируется на двух типах таблиц:

Пример нормализации

Рассмотрим измерение «Продукт» в схеме «звезда»:

В схеме «снежинка» это измерение может быть разбито на три таблицы:

Таким образом, вместо одной таблицы с повторяющимися названиями брендов и категорий создаётся иерархия, где каждый уровень хранится отдельно. Аналогично могут быть нормализованы измерения «Время» (год → квартал → месяц → день) или «Местоположение» (страна → регион → город).

Преимущества и недостатки

Преимущества

  1. Снижение избыточности данных — нормализация уменьшает дублирование атрибутов, что экономит дисковое пространство, особенно при большом количестве записей в таблицах измерений.
  2. Упрощение обновления данных — изменение атрибута (например, переименование категории) требует обновления только одной записи в соответствующей таблице, а не всех строк в денормализованном измерении.
  3. Поддержка сложных иерархий — схема «снежинка» естественным образом отражает многоуровневые структуры, такие как организационные деревья или географические деления.
  4. Гибкость в анализе — возможность агрегировать данные на разных уровнях иерархии без дублирования.

Недостатки

  1. Сложность запросов — для получения данных из нескольких уровней измерений требуется выполнение множества JOIN-операций, что увеличивает время выполнения запросов и нагрузку на базу данных.
  2. Снижение производительности — особенно заметно на больших объёмах данных, когда количество связей между таблицами растёт.
  3. Усложнение понимания схемы — для аналитиков и разработчиков схема «снежинка» менее интуитивна, чем «звезда», что затрудняет написание запросов и поддержку.
  4. Сложность индексации — для поддержания производительности может потребоваться больше индексов, что увеличивает время загрузки данных.

Сравнение со схемой «звезда»

ХарактеристикаСхема «звезда»Схема «снежинка»
Нормализация измеренийДенормализованыНормализованы
Количество таблицМало (обычно 1 факт + 3–10 измерений)Больше (из-за разбиения измерений)
Производительность запросовВысокая (меньше JOIN)Ниже (больше JOIN)
Избыточность данныхВысокаяНизкая
Простота пониманияВысокаяСредняя
Обновление данныхСложнее (много дублирования)Проще (одна запись на атрибут)

Применение

Схема «снежинка» используется в тех случаях, когда важна целостность данных и низкая избыточность, а производительность запросов не является критическим фактором. Типичные сценарии:

Пример реализации

Рассмотрим базу данных интернет-магазина. Таблица фактов sales содержит поля: sale_id, date_key, product_key, customer_key, quantity, amount. Измерение «Продукт» нормализовано:

Измерение «Клиент» также может быть нормализовано:

Для получения суммы продаж по категориям товаров потребуется запрос с JOIN через три таблицы измерений.

Критика и альтернативы

Схема «снежинка» подвергается критике за снижение производительности и сложность. Многие специалисты рекомендуют использовать схему «звезда» как более практичную для большинства задач бизнес-аналитики, особенно в современных OLAP-системах с колоночными СУБД (например, ClickHouse, Vertica), где денормализация не приводит к значительному росту объёма данных.

Альтернативой является гибридный подход — частичная нормализация только тех измерений, где избыточность действительно критична, или использование материализованных представлений для ускорения запросов.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →