В вычислительной технике схема «звезда» или модель «звезда» является простейшим стилем схемы витрины данных и представляет собой подход, наиболее широко используемый для разработки хранилищ данных и витрин размерных данных. [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 году по каждой марке и стране:
ВЫБЕРИТЕ P. Бренд , S. Страна AS Страны , СУММА ( F. Проданные_единицы ) 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 И P. Категория_продукта = ' тв ' ГРУППИРОВКА ПО P. Бренд , S. Страна