Таблица фактов — это центральная таблица в OLAP-системе, которая содержит количественные данные (меры) для анализа и ключи для связи с таблицами измерений.
CREATE TABLE fact_sales (
sale_id INT PRIMARY KEY,
product_key INT, -- Ссылка на измерение продуктов
time_key INT, -- Ссылка на измерение времени
customer_key INT, -- Ссылка на измерение клиентов
store_key INT, -- Ссылка на измерение магазинов
sales_amount DECIMAL(12,2), -- Мера: сумма продажи
quantity INT, -- Мера: количество единиц
unit_cost DECIMAL(10,2), -- Мера: себестоимость
discount DECIMAL(5,2) -- Мера: скидка
);
Таблица измерений — содержит описательные атрибуты, которые определяют контекст для фактов (кто, что, где, когда).
CREATE TABLE dim_product (
product_key INT PRIMARY KEY,
product_name VARCHAR(100),
product_description TEXT,
category VARCHAR(50),
subcategory VARCHAR(50),
brand VARCHAR(50),
color VARCHAR(30),
size VARCHAR(10),
current_price DECIMAL(10,2),
effective_date DATE,
expiration_date DATE
);
Схема "звезда" (Star Schema):
Схема "снежинка" (Snowflake Schema):
Характеристика | Таблица фактов | Таблица измерений |
---|---|---|
Назначение | Хранение мер (чисел) | Хранение контекста (текст) |
Размер | Очень большие | Относительно небольшие |
Изменяемость | Часто добавляются новые записи | Редко изменяются |
Ключи | Внешние ключи к измерениям | Первичные ключи |
Индексы | На внешние ключи и даты | На все часто используемые поля |
Типичная аналитическая модель продаж:
-- Фактовая таблица
CREATE TABLE fact_retail_sales (
sale_id BIGINT,
date_key INT REFERENCES dim_date(date_key),
product_key INT REFERENCES dim_product(product_key),
store_key INT REFERENCES dim_store(store_key),
customer_key INT REFERENCES dim_customer(customer_key),
sales_amount DECIMAL(12,2),
quantity INT,
profit DECIMAL(12,2)
);
-- Таблица измерения времени
CREATE TABLE dim_date (
date_key INT PRIMARY KEY,
full_date DATE,
day_of_week INT,
day_name VARCHAR(10),
month INT,
month_name VARCHAR(10),
quarter INT,
year INT
);
Для факт-таблиц:
Для таблиц измерений:
Резюмируем: факт-таблицы содержат "цифры" для анализа, а таблицы измерений обеспечивают "контекст" для этих цифр. Их грамотное проектирование — основа эффективной OLAP-системы.