Files
ddadminandClaude Opus 4.6 c6a20f3cf7 fix(modeling): исправлены ошибки по результатам перекрёстного ревью
- Зачем:
  - в статье и скриптах обнаружены фактические ошибки и несостыковки
- Что:
  - README: f.order_date -> d.date_actual в примере витрины (колонки order_date нет в fact_sales)
  - README: «календарь на 10 лет» -> «5 лет» (соответствует генерации 2023-2027 в скрипте)
  - 09_solution: bounds CTE теперь использует CURRENT_DATE для открытых интервалов (valid_to IS NULL)
  - 09_solution: комментарий про дубли в STG при повторном запуске блока 3
  - 05_ddl_dm: выравнивание total_line_items
  - AGENTS.md: обновлён диапазон скриптов 01-09
- Проверка:
  - визуальная проверка diff

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 15:13:38 +03:00

35 lines
1.3 KiB
SQL

-- ===============================================
-- DDL: Data Marts (DM)
-- Слой "готовых решений" — для BI, отчётов, API
-- ===============================================
DROP SCHEMA IF EXISTS dm CASCADE;
CREATE SCHEMA dm;
-- Витрина: ежедневные продажи по товарам и клиентам
-- Гранулярность: 1 строка = 1 день × 1 товар × 1 сегмент клиента
CREATE TABLE dm.mart_daily_sales (
date_actual DATE NOT NULL,
product_name VARCHAR(100) NOT NULL,
customer_segment VARCHAR(20) NOT NULL, -- напр. 'Premium', 'Basic'
total_qty INT NOT NULL,
total_revenue NUMERIC(18,2) NOT NULL
);
-- Витрина: 360°-портрет клиента (lifetime value)
CREATE TABLE dm.mart_customer_360 (
customer_bk INT NOT NULL,
first_order_date DATE,
last_order_date DATE,
total_line_items INT NOT NULL,
total_items INT NOT NULL,
lifetime_value NUMERIC(18,2) NOT NULL,
last_email VARCHAR(100),
last_city VARCHAR(50)
);
-- Индексы для ускорения BI (опционально, но рекомендовано)
CREATE INDEX ON dm.mart_daily_sales (date_actual);
CREATE INDEX ON dm.mart_daily_sales (product_name);
CREATE INDEX ON dm.mart_customer_360 (customer_bk);