В вычислительной технике звездообразная схема или звездообразная модель — это самый простой стиль схемы витрины данных и подход, наиболее широко используемый для разработки хранилищ данных и многомерных витрин данных. [1] Звездообразная схема состоит из одной или нескольких таблиц фактов , ссылающихся на любое количество таблиц измерений . Схема «звезда» является важным частным случаем схемы «снежинка» и более эффективна для обработки более простых запросов. [2]
Схема звезды получила свое название из-за сходства физической модели [3] с формой звезды с таблицей фактов в центре и окружающими ее таблицами измерений, представляющими точки звезды.
Звездообразная схема разделяет данные бизнес-процессов на факты, которые содержат измеримые количественные данные о бизнесе, и измерения, которые являются описательными атрибутами, связанными с фактическими данными. Примеры фактических данных включают цену продажи, объем продажи, а также измерения времени, расстояния, скорости и веса. Примеры атрибутов связанных измерений включают модели продуктов, цвета продуктов, размеры продуктов, географические местоположения и имена продавцов.
Звездчатую схему, имеющую много измерений, иногда называют схемой-сороконожкой . [4] Наличие измерений всего лишь с несколькими атрибутами, хотя и проще в обслуживании, приводит к запросам со многими соединениями таблиц и делает звездообразную схему менее простой в использовании.
Таблицы фактов записывают измерения или показатели для конкретного события. Таблицы фактов обычно состоят из числовых значений и внешних ключей к многомерным данным, в которых хранится описательная информация. [4] Таблицы фактов разработаны с низким уровнем однородной детализации (называемой «детализацией» или «зернистостью»), что означает, что факты могут записывать события на очень атомарном уровне. Это может привести к накоплению большого количества записей в таблице фактов с течением времени. Таблицы фактов относятся к одному из трех типов:
Таблицам фактов обычно присваивается суррогатный ключ , чтобы обеспечить уникальную идентификацию каждой строки. Этот ключ является простым первичным ключом.
Таблицы измерений обычно содержат относительно небольшое количество записей по сравнению с таблицами фактов, но каждая запись может иметь очень большое количество атрибутов для описания данных фактов. Измерения могут определять самые разные характеристики, но некоторые из наиболее распространенных атрибутов, определяемых таблицами измерений, включают:
Таблицам измерений обычно назначается суррогатный первичный ключ , обычно это целочисленный тип данных с одним столбцом, сопоставленный с комбинацией атрибутов измерения, которые образуют естественный ключ.
Звездообразные схемы денормализованы , что означает, что типичные правила нормализации, применяемые к транзакционным реляционным базам данных, смягчаются во время проектирования и реализации звездообразной схемы. Преимущества денормализации звездообразной схемы:
Рассмотрим базу данных продаж, возможно, из сети магазинов, классифицированную по дате, магазину и продукту. Изображение схемы справа — это версия схемы «звезда» образца схемы, представленного в статье о схеме «снежинка» .
Fact_Sales
это таблица фактов, и есть три таблицы измерений Dim_Date
, Dim_Store
и Dim_Product
.
Каждая таблица измерений имеет первичный ключ в своем Id
столбце, относящийся к одному из столбцов (представленных как строки в примерной схеме) Fact_Sales
трехстолбцового (составного) первичного ключа таблицы ( Date_Id
, Store_Id
, Product_Id
). Столбец непервичного ключа Units_Sold
таблицы фактов в этом примере представляет меру или метрику, которую можно использовать в вычислениях и анализе. Столбцы непервичных ключей таблиц измерений представляют дополнительные атрибуты измерений (например, атрибут Year
измерения Dim_Date
).
Например, следующий запрос дает ответ на то, сколько телевизоров было продано по каждой марке и в каждой стране в 1997 году:
ВЫБЕРИТЕ П . Бранд , С. _ Страна AS Страны , СУММА ( F. Units_Sold ) _ FROM Fact_Sales F INNER JOIN Dim_Date D ON ( F . Date_Id = D . Id ) INNER JOIN Dim_Store S ON ( F . Store_Id = S . Id ) INNER JOIN Dim_Product P ON ( F . Product_Id = P . Id ) ГДЕ D . Год = 1997 И П . Product_Category = 'ТВ' ГРУППИРОВАТЬ ПО П. _ Бранд , С. _ Страна