Как создать структуру хранилища данных в формате звездной схемы?

Здравствуйте! У меня возникла проблема с пониманием архитектуры хранилищ данных (DWH). Мне необходимо создать DWH, однако при проектировании я столкнулся с ситуацией, когда у меня есть несколько таблиц фактов. Например, у меня есть таблица транзакций маркетплейса, которая содержит такие поля, как тип транзакции, артикул, дата, склад, режим отправки и т.д. У этой таблицы имеются соответствующие таблицы измерений (по артикулу, складу). 

Кроме того, существует еще одна таблица "Заказы", в которой указаны столбцы: статус заказа, артикул, дата, время доставки и т.д. Таким образом, у меня есть несколько таблиц фактов, и я не понимаю, как можно свести все эти таблицы к одной общей таблице фактов, если мне действительно нужно использовать несколько из них.
  • 5 марта 2025 г. 16:04
Ответы на вопрос 2
Для проектирования хранилища данных в формате звездной схемы (star schema), вам действительно нужно учитывать особенности ваших таблиц фактов и измерений. Поскольку у вас есть несколько таблиц фактов, это может указывать на то, что ваша модель не обязательно должна быть строго «звёздной», и вам стоит рассмотреть подход с использованием снотов (fact constellation), который позволяет вам работать с несколькими таблицами фактов.

### Основные шаги по проектированию:

1. **Определение фактов и измерений**:
   - Определите факты, которые вас интересуют: в вашем случае это транзакции и заказы.
   - Выделите измерения, которые будут использоваться в каждой из фактовых таблиц. Например, для транзакций это могут быть артикул, склад, тип транзакции и т.д., а для заказов – артикул, статус заказа и дата.

2. **Создание таблиц фактов**:
   - Создайте две отдельные таблицы фактов:
     - **Таблица фактов транзакций** (например, `Fact_Transactions`): 
       - Поля: TransactionID, ArticleID, DateID, WarehouseID, TransactionType, ShippingMode и т.д.
     - **Таблица фактов заказов** (например, `Fact_Orders`):
       - Поля: OrderID, ArticleID, DateID, DeliveryTime, OrderStatus и т.д.

3. **Создание таблиц измерений**:
   - Создайте измерения, которые будут ссылаться на фактовые таблицы:
     - **Таблица измерений артикулов** (например, `Dim_Articles`):
       - Поля: ArticleID, Name, Category и т.д.
     - **Таблица измерений складов** (например, `Dim_Warehouses`):
       - Поля: WarehouseID, Location, Manager и т.д.
     - **Таблица измерений дат** (например, `Dim_Dates`):
       - Поля: DateID, Date, Month, Quarter, Year и т.д.
     - **Таблица измерений статусов заказов** (например, `Dim_OrderStatus`):
       - Поля: StatusID, StatusDescription.

4. **Связь между таблицами**:
   - Установите связи между таблицами фактов и измерений:
     - `Fact_Transactions` будет ссылаться на `Dim_Articles`, `Dim_Warehouses`, `Dim_Dates`.
     - `Fact_Orders` будет ссылаться на `Dim_Articles`, `Dim_Dates`, `Dim_OrderStatus`.

5. **Анализ и отчеты**:
   - При создании отчетов вы сможете выполнять SQL-запросы, объединяя данные из разных таблиц фактов и измерений. Например, вы можете проанализировать, как продажи по транзакциям соотносятся со статусами заказов, используя JOIN между таблицами фактов и измерений.

### Итого:
- Используйте несколько таблиц фактов, если ваши факты не связаны и отличаются по своему содержанию. Это позволит вам сохранить четкую структуру и облегчить анализ.
- Рассматривайте таблицы измерений как общие для разных фактовых таблиц, чтобы избежать дублирования данных и упростить модель. 

Этот подход позволяет организации гибкой аналитики, в то время как звездная схема сохраняет простоту использования и понимания.
Здравствуйте, у меня возникла проблема с пониманием архитектуры dwh. Мне требуется сделать хранилище, но при проектировании получается, что у меня не одна единственная таблица фактов а их несколько. К примеру:
У меня есть таблица транзакций маркетплейса где указан: тип транзации, артикул, дата, склад, режим отправки и т.д.
Также у этой таблицы есть таблицы измерений (по артикулу, складу).
Но есть ещё одна таблица "Заказы" у которой указаны столбцы: статус заказа, артикул, дата, время доставки и т.д


Это нормальная ситуация. Для DWH-систем тебе нормализация не нужна. Можно денормализовывать.
Тебе нужно все таблицы поделить на 2 кучки. Первая кучка - это DWH-факты которые будут денормализованы.
Транзакции и заказы должны быть денормализованы и слиты в 1 ооооочень большую таблицу.
Она будет в центре снежинки.

Вторая кучка - это dimensions . Они будут лучами снежинки.

И не забывай сделать partitioning для главной DWH таблички.
Похожие вопросы