Схема зірки

Схема "зірки", схема зоряного з'єднання, звездоподобних схема, зоряна схема (від англ. star schema) - спеціальна організація реляційних таблиць, зручна для зберігання багатовимірних показників. Лежить в основі реляційного OLAP.

Модель даних складається з двох типів таблиць: однією таблиці фактів (fact table) - центр "зірки" - й кількох таблиць вимірів (dimension table) за кількістю вимірювань в моделі даних - промені "зірки".

Приклад схеми зоряного з'єднання

Таблиця фактів зазвичай містить одну або декілька колонок типу DECIMAL, що дають числову характеристику якогось аспекту предметної області (наприклад, обсяг продажів для торгової компанії або сума платежів для банку), і кілька цілочисельних колонок-ключів для доступу до таблиць вимірів.

Таблиці вимірювань розшифровують ключі, на які посилається таблиця фактів; наприклад, таблиця "products" вимірювання "товари" бази даних торгової компанії може містити відомості про назву товару, його виробника, типі товару. За рахунок використання спеціальної структури таблиці вимірів реалізується ієрархія вимірювань, у тому числі гілкується.

Зазвичай дані в таблицях-вимірах денормалізовани: ціною кілька неефективного використання дискового простору вдається зменшити число що беруть участь в операції з'єднання таблиць, що зазвичай призводить до сильного зменшення часу виконання запиту. Іноді, проте, потрібно провести нормалізацію таблиць-вимірів; така схема носить назву "сніжинка" (snowflake schema).

SQL-запит до схеми "зірка" зазвичай містить в собі:

  • одне або кілька сполук таблиці фактів з таблицями вимірювань;
  • кілька фільтрів (SQL-оператор WHERE), застосовуваних до таблиці фактів або таблицями вимірювань;
  • угруповання і агрегування по необхідних елементів ієрархії вимірів (dimension elements).

Наприклад:

 SELECT  d_product  .  brand  ,  d_store  .  country_iso_id  ,  SUM  (  f_sales  .  units_sold  )  AS  summa  FROM  f_sales  ,  d_customer  ,  d_time  ,  d_store  ,  d_product  WHERE  f_sales  .  customer_id  =  d_customer  .  customer_id  AND  f_sales  .  date_id  =  d_time  .  date_id  AND  f_sales  .  store_id  =  d_store  .  store_id  AND  f_sales  .  product_id  =  d_product  .  product_id  AND  d_time  .  year_id  =  1997  AND  d_product  .  category_id  =  "Tv"  GROUP  BY  d_product  .  brand  ,  d_store  .  country_iso_id