Отлично! Я умею рисовать Mermaid-схемы и с удовольствием добавлю их в план. Вот переработанный вариант с дополнительными визуализациями для ключевых концепций. --- ### **Структура статьи про хранилище данных ** 1. Введение. Проблема аналитики в OLTP 2. Учебный пример. Интернет-магазин 3. Архитектура. Зачем слои? 4. Путешествие данных. STG→ODS→DDS→DM 5. Базовые понятия. Факты, Измерения, SCD 6. Модели данных. 3NF, DV, Звезда 7. Практикум. Собираем витрину 8. Выбор моделию Дерево решений 9. Эксплуатация. Качество и эволюция 10. Заключение --- #### **1. Введение: Аналитика — это не оперативный учет** OLTP - Оперативный учет - CRM - Заказы - Склад DWH - Аналитическое хранилище -> Единая модель
для анализа OLTP - Сложные JOIN -> Медленные отчеты -> Проблемы Ообенности DWH - Слоистая архитектура - Оптимизированные модели **Ключевые тезисы**: - OLTP vs OLAP: транзакции против анализа - Почему "одна большая таблица" не работает на истории - 3 преимущества слоев: управляемость, производительность, прозрачность --- #### **2. Учебный пример: интернет-магазин** *(Оставляю вашу отличную ER-диаграмму без изменений)* ```mermaid erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ ORDER_ITEM : contains PRODUCT ||--o{ ORDER_ITEM : referenced PRODUCT ||--o{ PRICE : has PROMO ||--o{ ORDER_ITEM : applied ``` --- #### **3. Архитектура хранилища: зачем делить на слои?** ```mermaid flowchart TD subgraph Sources[Источники OLTP] A[CRM] B[Заказы] C[Склад] end A --> STG B --> STG C --> STG subgraph STG[STG - Сырые данные] D[Таблицы-клоны
сырые данные] end STG --> ODS subgraph ODS[ODS - Очищенные данные] E[Стандартизированные
типы и форматы] end ODS --> DDS subgraph DDS[DDS - Интегрированная модель] F[Бизнес-сущности
SCD, интеграция] end DDS --> DM subgraph DM[DM - Витрины для аналитики] G[Звезда/снежинка
агрегаты] end DM --> BI[BI-системы
и отчеты] ``` --- #### **4. Путешествие данных по слоям** ```mermaid flowchart LR subgraph STG[STG - Сырье] A[raw_orders.json] B[raw_customers.csv] C[Формат как в источнике] end subgraph ODS[ODS - Очистка] D[stg_orders] E[stg_customers] F[Типизация, валидация] end subgraph DDS[DDS - Интеграция] G[dim_customer
SCD Type 2] H[fact_orders
с суррогатными ключами] end subgraph DM[DM - Готовые решения] I[mart_sales
агрегированные данные] J[mart_customer_360
обзор по клиентам] end STG --> ODS ODS --> DDS DDS --> DM ``` --- #### **5. Базовые понятия: Факты, Измерения, Ключи** ```mermaid erDiagram dim_date ||--o{ fact_sales : "дата" dim_customer ||--o{ fact_sales : "клиент" dim_product ||--o{ fact_sales : "товар" dim_customer { bigint customer_sk PK varchar customer_bk varchar customer_name varchar email date valid_from date valid_to boolean is_current } fact_sales { bigint sale_id PK bigint customer_sk FK bigint product_sk FK date date_sk FK int quantity decimal amount } ``` **SCD Type 2 - Визуализация истории**: ```mermaid gantt title SCD Type 2: История изменений клиента (ID = 123) dateFormat YYYY-MM-DD axisFormat %Y-%m section Москва, premium@email.com Версия 1 :active, 2023-01-01, 2023-05-15 section Москва, new_premium@email.com Версия 2 :active, 2023-05-16, 2023-09-30 section Санкт-Петербург, new_premium@email.com Версия 3 :active, 2023-10-01, 2024-12-31 ``` --- #### **6. Модели данных для DDS** **Data Vault 2.0**: ```mermaid erDiagram hub_customer ||--o{ sat_customer_info : "хаб" hub_order ||--o{ sat_order_details : "хаб" hub_product ||--o{ sat_product_info : "хаб" hub_customer ||--o{ link_order_customer : "участвует" hub_order ||--o{ link_order_customer : "включает" hub_order ||--o{ link_order_product : "содержит" hub_product ||--o{ link_order_product : "входит в" hub_customer { string customer_hash_key PK string customer_id BK datetime load_dttm } sat_customer_info { string customer_hash_key PK,FK datetime load_dttm PK string customer_name string email string phone } link_order_customer { string order_customer_hash_key PK string order_hash_key FK string customer_hash_key FK datetime load_dttm } ``` **Сравнение моделей**: ```mermaid quadrantChart title Сравнение моделей данных по сложности и гибкости x-axis "Низкая сложность" --> "Высокая сложность" y-axis "Низкая гибкость" --> "Высокая гибкость" "Звезда": [0.2, 0.3] "3NF": [0.6, 0.5] "Data Vault": [0.8, 0.8] "Anchor": [0.9, 0.9] ``` --- #### **7. Практикум: собираем витрину** ```mermaid flowchart TD A[Источники] --> STG STG[STG: сырые заказы, товары] --> ODS ODS[ODS: очищенные данные] --> DDS subgraph DDS[DDS: интегрированная модель] B[dim_customer
SCD Type 2] C[dim_product] D[dim_date] E[fact_sales] end DDS --> F{Сборка витрины} F --> G[mart_daily_sales] F --> H[mart_customer_lifetime] G --> I[Дашборд продаж] H --> J[Отчет по клиентам] ``` **Пример SQL для витрины**: ```sql -- Витрина ежедневных продаж CREATE TABLE mart_daily_sales AS SELECT d.date, p.product_name, c.customer_segment, SUM(f.quantity) as total_quantity, SUM(f.amount) as total_amount FROM fact_sales f JOIN dim_date d ON f.date_key = d.date_key JOIN dim_product p ON f.product_key = p.product_key JOIN dim_customer c ON f.customer_key = c.customer_key WHERE c.is_current = true GROUP BY d.date, p.product_name, c.customer_segment; ``` --- #### **8. Выбор модели: дерево решений** ```mermaid flowchart TD Start[Выбор модели DDS] --> Q1{Количество источников?} Q1 -->|Один источник| Q2{Требования к истории?} Q1 -->|Несколько источников| Q3{Частота изменений схемы?} Q2 -->|Простая история| Model1[Звезда/Снежинка] Q2 -->|Полная аудируемая история| Model2[Data Vault] Q3 -->|Редко| Model3[3NF] Q3 -->|Часто| Model4[Data Vault] Model1 --> Final[Рекомендация] Model2 --> Final Model3 --> Final Model4 --> Final ``` --- #### **9. Эксплуатация: качество и эволюция** ```mermaid graph TB A[Данные] --> B{Контроль качества} B --> C[Проверка уникальности] B --> D[Проверка полноты] B --> E[Валидация форматов] B --> F[Свежесть данных] C --> G[✅ Успех] D --> G E --> G F --> G C --> H[❌ Ошибка] D --> H E --> H F --> H G --> I[Загрузка в слой] H --> J[Оповещение
и остановка] ``` --- #### **10. Заключение: главное — понимать "почему"** ```mermaid mindmap root((Хранилище данных)) Архитектура Слои STG→ODS→DDS→DM Разделение ответственности Управляемость изменений Модели данных 3NF: Целостность Data Vault: Масштабируемость Звезда: Производительность Ключевые понятия Факты и измерения Суррогатные ключи SCD Type 2 Практика Понимать бизнес-задачу Выбирать подходящую модель Строить итеративно ``` --- Такой визуализированный план поможет студентам: 1. **Быстрее понять сложные концепции** через схемы 2. **Увидеть связи между разделами** через общую навигацию 3. **Запомнить ключевые отличия** моделей через сравнительные диаграммы 4. **Поножить практическое применение** через конкретные примеры Все схемы готовы к использованию в статье и будут отлично работать в Markdown-редакторах с поддержкой Mermaid.