Отлично! Я умею рисовать Mermaid-схемы и с удовольствием добавлю их в план. Вот переработанный вариант с дополнительными визуализациями для ключевых концепций.
---
### **Структура статьи про хранилище данных (с визуализацией Mermaid)**
```mermaid
flowchart TD
A[ ] --> B[1. Введение
Проблема аналитики в OLTP]
B --> C[2. Учебный пример
Интернет-магазин]
C --> D[3. Архитектура
Зачем слои?]
D --> E[4. Путешествие данных
STG→ODS→DDS→DM]
E --> F[5. Базовые понятия
Факты, Измерения, SCD]
F --> G[6. Модели данных
3NF, DV, Звезда]
G --> H[7. Практикум
Собираем витрину]
H --> I[8. Выбор модели
Дерево решений]
I --> J[9. Эксплуатация
Качество и эволюция]
J --> K[10. Заключение]
```
---
#### **1. Введение: Аналитика — это не оперативка**
```mermaid
flowchart LR
subgraph OLTP[OLTP - Операционные системы]
A[CRM]
B[Заказы]
C[Склад]
end
subgraph DWH[DWH - Аналитическое хранилище]
D[Единая модель
для анализа]
end
OLTP -- Сложные JOIN
Медленные отчеты --> X[Проблемы]
X -- Слоистая архитектура
Оптимизированные модели --> 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.