Схема звезды

undefined

Схема звезды (нем. Sternschema) — это особый вид модели данных, цель которой заключается не в нормализации, а в оптимизации для эффективных операций чтения. Основная область применения — хранилища данных и OLAP-приложения.

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

Как правило, схема звезды является денормализованной. Возможные аномалии и увеличенный объём хранения допускаются ради повышения производительности. Улучшением служит родственная схеме звезды схема снежинки, где, однако, для связывания многоуровневых таблиц измерений требуются операции соединения (join).

Несмотря на развитие технологий и появление новых архитектур данных, схема «звезда» сохраняет свою актуальность и остаётся одной из наиболее эффективных моделей для аналитических запросов и систем бизнес-аналитики[1]. В современных подходах, таких как Data Lake, она часто применяется в качестве логического семантического слоя для структурирования данных и придания им бизнес-контекста[1]. Кроме того, в многоуровневых архитектурах схема «звезда» обычно используется как презентационный слой (витрина данных) для конечных пользователей[2].

Определение

В качестве логической схемы данных для хранилищ данных получила распространение так называемая схема звезды. Эта схема состоит из одной фактной и нескольких таблиц измерений, которые упорядочены вокруг фактной таблицы «лучами» и ссылаются только на одну фактную таблицу. Название схемы происходит от радиального расположения таблиц измерений вокруг центральной фактной. Фактная таблица содержит информационные атрибуты, такие как продажи, периоды, издержки и др., а в качестве первичного ключа — составной ключ из первичных ключей участвующих таблиц измерений.

Каждая таблица измерений находится в соотношении 1:n с фактной таблицей. Связь 1:n реализуется через первичный ключ таблицы измерений и внешний ключ в фактной таблице. Фактная таблица имплицитно интегрирует многие отношения m: n, что приводит к значительной избыточности. Ключ фактной таблицы составляется из первичных ключей соответствующих таблиц измерений, которые одновременно выступают в роли внешних ключей.

Схема звезды позволяет выбирать, агрегировать и анализировать измеряемые значения (факты). Таблицы измерений, как правило, не нормализованы и поэтому остаются денормализованными: между неключевыми атрибутами существуют функциональные зависимости, нарушающие третью нормальную форму (3NF). Однако это нарушение допускается, так как структура данных обеспечивает большую скорость обработки в ущерб целостности данных и экономии места хранения.

Фактные и таблицы измерений

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

Таблицы измерений, напротив, содержат «описательные» данные. Фактная таблица содержит внешние ключи, ссылающиеся на записи в таблицах измерений, определяющие их значения. Обычно совокупность внешних ключей на таблицы измерений формирует первичный ключ фактной таблицы. Это подразумевает, что каждая комбинация значений измерений встречается в таблице фактов только один раз.
Таблицы измерений относительно статичны и обычно значительно меньше по объёму, чем фактные таблицы. Название «измерение» объясняется тем, что каждая такая таблица представляет собой отдельное измерение многомерного OLAP-куба.

Поскольку между неключевыми атрибутами в таблицах измерений существуют функциональные зависимости, третья нормальная форма также сознательно нарушается. Чтобы привести такие данные к 3NF, таблицу измерений нужно было бы разделить на иерархические подтаблицы, но ради увеличения производительности в схеме звезды этого не делают и принимают возникающую избыточность.

Преимущество разделения фактов и измерений в том, что факты можно анализировать по каждому измерению независимо и генерализованно. OLAP-приложение не требует «знания» о смысле измерения — интерпретация предоставляется пользователю.

При этом объём таблиц измерений также может быть существенным. Фактные таблицы в схеме звезды часто содержат более 10 миллионов записей. Таблицы измерений занимают меньший объём, но для отдельных измерений могут быть весьма велики. Для уменьшения масштабов и ускорения доступа очень большие таблицы измерений могут быть нормализованы с образованием схемы снежинки.

Медленно изменяющиеся измерения (Slowly Changing Dimensions)

Файл:Slowly changing dimension type 2.svg
Пример реализации SCD типа 2: при смене адреса поставщика (с Чикаго на Нью-Йорк) добавляется новая запись с новым суррогатным ключом (2), а старая запись (1) помечается как недействительная (Is_Current = N)

Медленно меняющиеся измерения (англ. Slowly Changing Dimensions, SCD) — это концепция в хранилищах данных для управления изменениями в атрибутах таблиц измерений с течением времени[3]. Различные типы SCD предлагают разные подходы к отслеживанию исторических данных, что необходимо для корректного исторического анализа[4]. Основоположником классификации считается Ральф Кимбалл[5].

SCD Тип 0: Сохранение оригинала (англ. Retain Original) Этот тип применяется к атрибутам, значения которых никогда не должны меняться, например, дата рождения клиента или дата его первой покупки[6]. Любые изменения в исходных данных игнорируются, и значение в хранилище данных остаётся неизменным[7].

SCD Тип 1: Перезапись (англ. Overwrite) Старое значение атрибута перезаписывается новым, в результате чего история изменений полностью теряется[6]. В таблице хранится только самое актуальное состояние[8]. Преимуществами являются простота реализации и экономия места для хранения, а недостатком — невозможность проводить исторический анализ, так как предыдущие данные утрачиваются[6].

SCD Тип 2: Добавление новой строки (англ. Add New Row) Наиболее распространённый метод, позволяющий сохранять полную историю изменений[6]. При изменении атрибута в таблицу измерения добавляется новая строка с обновлёнными данными, в то время как старая строка помечается как неактуальная[8]. Для отслеживания версий используются дополнительные поля, такие как суррогатный ключ для каждой строки, даты начала и окончания действия записи (англ. effective date) или флаг текущей версии[8]. Применяется для отслеживания смены адреса клиента, должности сотрудника и т. д[6]

SCD Тип 3: Добавление нового атрибута (англ. Add New Attribute) Метод позволяет отслеживать ограниченную историю изменений путём добавления в таблицу дополнительных столбцов для хранения предыдущих значений[8].. Например, в запись добавляется столбец «Previous_State», в который записывается старое значение атрибута перед его обновлением. Подход позволяет хранить только ограниченное количество исторических версий (чаще всего одну) и подходит для случаев, когда изменения происходят редко[6][7].

SCD Тип 4: Добавление таблицы истории (англ. Add History Table) Подход предполагает использование двух таблиц: основной таблицы измерений, которая хранит только текущие данные (как в SCD Тип 1), и отдельной таблицы истории, в которую записываются все изменения[6]. Атрибуты, которые меняются часто, могут быть вынесены в отдельное «микро-измерение» (англ. mini-dimension), чтобы основная таблица не разрасталась[9].

SCD Тип 5: Гибридный подход (англ. Mini-Dimension and Type 1 Outrigger) Является расширением Типа 4. Он использует «микро-измерение», но при этом в основной таблице измерения хранится ключ, указывающий на текущую версию атрибутов в этом микро-измерении. Этот ключ обновляется по принципу Типа 1 (перезапись)[10]. Название «Тип 5» происходит от комбинации методов: 4 + 1 = 5[10]. Такой подход позволяет анализировать исторические факты с учётом исторических значений атрибутов и одновременно легко получать доступ к их текущим значениям[10].

SCD Тип 6: Комбинированный подход (англ. Combined Approach) Гибрид типов 1, 2 и 3, который позволяет одновременно видеть текущее значение, хранить полную историю и иметь доступ к предыдущему значению[6][11]. В одной строке таблицы измерения сочетаются: перезапись текущего значения в столбце «Current_Value» (Тип 1), добавление новой строки для каждого исторического изменения (Тип 2) и хранение предыдущего значения в отдельном столбце (Тип 3)[12]. Название «Тип 6» символизирует сумму подходов: 1 + 2 + 3 = 6[12].

SCD Тип 7: Гибридный подход с двумя ключами (англ. Hybrid: Dual Type 1 and Type 2) Вариация Типа 6, где измерение логически разделяется на две таблицы: одна для текущих данных (обновляется по Типу 1), а другая — для исторических (обновляется по Типу 2)[13]. Таблица фактов содержит два внешних ключа: один указывает на суррогатный ключ для исторической версии, а другой — на ключ текущей версии[13]. Это обеспечивает гибкость, позволяя аналитикам запрашивать данные как на основе исторического контекста транзакции, так и на основе самого последнего состояния измерения[13].

Характеристики схемы звезды

  • Таблицы измерений
    • Первичный ключ для идентификации значений измерений
    • Отражение иерархии измерений через атрибуты
    • Денормализованы (не нормализованы)
  • Фактная таблица
    • Внешние ключи на таблицы измерений, то есть нижний уровень каждого измерения включается в качестве ключа в фактную таблицу
    • Внешние ключи на измерения формируют составной первичный ключ для фактов

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

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

  • Высокая производительность запросов: благодаря денормализации таблиц измерений сокращается количество соединений (join), что обеспечивает высокую скорость выполнения аналитических запросов. Это критически важно для интерактивных отчётов и дашбордов[14]. Специальный тип соединения (star join) также хорошо оптимизируется.
  • Простота и прозрачность: структура с центральной таблицей фактов и присоединёнными к ней таблицами измерений интуитивно понятна для бизнес-пользователей[14]. Модель содержит значительно меньше связей, чем разветвлённая схема снежинки, что облегчает как анализ данных, так и модернизацию отчётности.
  • Совместимость с BI-инструментами: большинство платформ бизнес-аналитики (BI) оптимизированы для работы со схемой «звезда», что упрощает их интеграцию и настройку[15].
  • Управляемость аномалий: аномалии изменения легко контролируются, поскольку данные в таблицах измерений (классификации) обычно меняются редко.
  • Относительно небольшой объём хранения: таблицы измерений, как правило, малы по сравнению с таблицами фактов, поэтому дополнительный объём хранения, вызванный денормализацией, в традиционных реализациях считается незначительным.

Недостатки

  • Увеличение времени ответа при частых обращениях к очень большим таблицам измерений (функции просмотра/обзора)
  • Избыточность внутри одной таблицы измерений вследствие многократного хранения одних и тех же значений или фактов
  • Сложности в построении агрегатов
  • Повышенные затраты на хранение: из-за дублирования данных в денормализованных таблицах измерений схема «звезда» может приводить к более высоким затратам на хранение. Это особенно актуально для облачных платформ, где стоимость напрямую зависит от объёма хранимых данных[16].

Схема звезды и схема снежинки (нормализованная)

Схема звезды Схема снежинки
Цель
  • Удобство запроса (доступ к агрегатам; простая и интуитивная модель данных)
  • Минимизация избыточности за счёт нормализации
  • Эффективная обработка транзакций
Результат
  • Простая, локальная и стандартизированная модель данных
  • Одна фактная и несколько таблиц измерений
  • Сложная и специализированная схема
  • Много сущностей и связей при масштабных моделях данных
Производительность и стоимость в облачных СУБД
  • Более простые запросы могут снижать затраты на вычисления.
  • Денормализация приводит к увеличению объёма данных и, как следствие, к более высоким затратам на хранение.
  • Экономия места для хранения за счёт нормализации.
  • Более сложные соединения могут требовать больше вычислительных мощностей, однако современные колоночные СУБД значительно сократили разрыв в производительности.

Роль в современных архитектурах данных

Несмотря на появление новых технологий, таких как Big Data, и развитие облачных платформ, схема «звезда» сохраняет свою актуальность, однако её роль эволюционировала. Если в классических хранилищах данных она часто составляла ядро системы, то в современных многоуровневых архитектурах она, как правило, занимает место презентационного слоя (витрины данных), предназначенного для конечных пользователей и аналитических инструментов.

В архитектуре Data Lake, где хранятся большие объёмы неструктурированных и полуструктурированных данных, схема «звезда» часто применяется в качестве логического семантического слоя. Она помогает структурировать данные и придать им бизнес-контекст, делая их доступными для анализа.

В гибридных моделях схема «звезда» часто используется в тандеме с методологией Data Vault. В таких архитектурах Data Vault служит для создания гибкого, масштабируемого и легко поддающегося аудиту интеграционного слоя, который объединяет данные из различных источников[17][18]. На основе этого слоя для конкретных бизнес-задач и отделов строятся витрины данных (data marts) в виде схемы «звезда», которые предоставляют данные для отчётности и анализа.

В контексте современных архитектур, таких как Data Lakehouse, и с удешевлением облачного хранения данных, конкуренцию схеме «звезда» в некоторых случаях составляют широкие денормализованные таблицы (иногда называемые «one big table»), которые упрощают работу для конечных пользователей в BI-инструментах[19]. Тем не менее, схема «звезда» остаётся одной из доминирующих техник моделирования для создания витрин данных благодаря своей простоте, высокой производительности запросов и оптимальной поддержке со стороны большинства BI-платформ[20].

Диаграмма требований для схемы звезды

1. Сбор бизнес-требований:
Построение схемы звезды начинается с вопросов:

  • Какие факты интересуют и по каким критериям?
  • Доступные данные, требуемые отчёты и содержание таблиц

2. Построение диаграммы требований:
Определённые спецификации отображаются на диаграмме требований.

  • Необходимые показатели:
    • Атрибуты, характеризующие результат работы бизнес-единицы
    • Вопрос: Насколько хорошо?
  • Измерения:
    • Атрибуты, по которым измеряются показатели
    • Вопросы: Что? Когда? Где?
  • Категории:
    • Диапазоны значений измерения
    • Вопрос: Насколько точно?

Star Join

Схема звезды приводит к типичным запросам с использованием «звёздного соединения» (Star Join), которые выглядят следующим образом:

SELECT Атрибуты измерений, SUM(Фактов)
FROM Фактная_таблица
INNER JOIN Таблица_измерения
[INNER JOIN дополнительные таблицы измерений]
WHERE Условие
GROUP BY Атрибут_измерения
ORDER BY Агрегация_фактов или Атрибут_измерения

Пример

undefined

В качестве примера рассмотрим запрос для анализа данных о продажах с целью получения общей выручки по категориям товаров и регионам для всех транзакций, совершённых после 31 декабря 2020 года. Такой запрос объединяет центральную таблицу фактов с несколькими таблицами измерений[21].

Для примера используется следующая структура таблиц:

  • FactSales (таблица фактов): содержит внешние ключи (DateID, ProductID, CustomerID) и показатели (Quantity, Price).
  • DimDate (измерение времени): содержит атрибуты даты, такие как FullDate.
  • DimProduct (измерение товаров): содержит атрибуты товаров, такие как Category.
  • DimCustomer (измерение клиентов): содержит атрибуты клиентов, такие как Region.
SELECT
    dp.Category AS ProductCategory,
    dc.Region AS CustomerRegion,
    SUM(fs.Quantity * fs.Price) AS TotalRevenue
FROM
    FactSales AS fs
INNER JOIN
    DimDate AS dd ON fs.DateID = dd.DateID
INNER JOIN
    DimProduct AS dp ON fs.ProductID = dp.ProductID
INNER JOIN
    DimCustomer AS dc ON fs.CustomerID = dc.CustomerID
WHERE
    dd.FullDate > '2020-12-31'
GROUP BY
    dp.Category,
    dc.Region
ORDER BY
    TotalRevenue DESC;

Пояснение к запросу:

  • FROM FactSales AS fs: Запрос начинается с центральной таблицы фактов[21].
  • INNER JOIN: Используется для соединения таблицы фактов с таблицами измерений по соответствующим ключам[22].
  • WHERE dd.FullDate > '2020-12-31': Ключевое условие для фильтрации, которое отбирает только записи после 2020 года.
  • SUM(fs.Quantity * fs.Price): Вычисляется метрика — общая выручка.
  • GROUP BY dp.Category, dc.Region: Результаты агрегируются по категориям товаров и регионам клиентов для получения суммарных данных в нужных разрезах[23].
  • ORDER BY TotalRevenue DESC: Результаты сортируются для отображения наиболее прибыльных групп.

Оптимизаторы баз данных часто распознают подобный шаблон «звёздного соединения» и применяют для его обработки специализированные планы выполнения[24]. Число используемых соединений в схеме звезды не зависит от длины пути агрегации, в отличие от схемы снежинки.

Примечания

Литература

  • Kimball, R.; Ross, M. The Data Warehouse Toolkit. The Complete Guide to Dimensional Modeling. 2-е изд. New York: John Wiley & Sons, 2002. ISBN 0-471-20024-7. (на англ.)
  • Кемпер, А.; Айклер, А. Datenbanksysteme. Eine Einführung. 6-е изд. Мюнхен: Oldenbourg Wissenschaftsverlag, 2006. ISBN 3-486-57690-9.
  • Langit, L. Foundations of SQL Server 2005 Business Intelligence. 1-е изд. New York: Apress, 2007. ISBN 978-1-59059-834-4. (на англ.)
  • Rob, P.; Coronel, C.; Crockett, K. Database systems: design, implementation & management. London: Cengage Learning, 2008. ISBN 1-84480-732-0. (на англ.)
  • Kimball, R.; Ross, M. The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling. 3-е изд. New York: Wiley, 2013. ISBN 978-1-118-53080-1. (на англ.)
  • Linstedt, D.; Olshimke, M. Building a Scalable Data Warehouse with Data Vault 2.0. Waltham, MA: Morgan Kaufmann, 2015. ISBN 978-0-12-802648-9. (на англ.)