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

Я пытаюсь разработать трехмерное моделирование для хранилища данных для одного из моих проектов (заказ на продажу). Я новичок в этой концепции.

До сих пор я мог понять, что продукт, клиент и дата могут храниться в таблице измерений, а информация о заказе будет в таблице фактов.

Структура таблицы Date_dimension будет

date_dim_id, date, week_number, month_number

Структура таблицы Product_dimension будет

product_dim_id, product_name, desc, sku

Структура таблицы Order_fact будет

order_id, product_dim_id(fk), date_dim_id(fk), order_quantity, order_total_price, etc

Если в заказе 2 и более товаров, будет ли повторная запись в таблице order_fact для одного и того же order_id, date_dim_id

Пожалуйста, помогите в этом. Я смущен здесь. Я знаю, что в реляционной базе данных order table будет иметь одну запись для каждого заказа, а связь между продуктом и заказом будет поддерживаться в другой таблице, имеющей order_id и product_id в качестве внешнего ключа.

Заранее спасибо.


person saran    schedule 29.02.2016    source источник
comment
Какую информацию вы хотите сохранить из таблицы заголовка заказа? Вы создаете факт на уровне детализации заказа, а затем решаете, как сохранить информацию заголовка заказа. Например, клиент появляется только в заголовке в вашей исходной системе, но в таблице фактов вашего заказа он будет повторяться для всех отдельных заказов на продукты. С этим нет проблем. Единственная проблема, скажем, когда у вас есть общая сумма покупок в заголовке - вы не можете повторить это для нескольких записей продуктов.   -  person Nick.McDermaid    schedule 29.02.2016
comment
Для этого есть два основных обходных пути: 1. разделить доставку на количество записей и распределить по всем записям; 2. Добавьте еще одну запись и представьте, что доставка — это товар. Что бы вы ни делали, вам необходимо сохранить исходный номер заказа, чтобы вы могли измерять такие вещи, как «средний объем продаж на заказ» и «средний объем товаров на заказ». Во всяком случае, это объемное моделирование заголовков/деталей до тошноты обсуждается в Интернете. Почему бы вам не провести небольшое исследование и не задать конкретный вопрос.   -  person Nick.McDermaid    schedule 29.02.2016
comment
вам, вероятно, следует использовать элемент строки заказа в качестве зерна вашей таблицы фактов.   -  person Neil McGuigan    schedule 02.03.2016


Ответы (1)


Это классический случай, когда вам следует (вероятно) иметь две таблицы фактов FactOrderHeader и FactOrderDetail.

FactOrderHeader будет иметь запись для каждого заказа, в которой будет храниться информация о стоимости заказа и любых скидках на уровне заказа; хотя в некоторых случаях они могут быть выражены в виде записи OrderDetail.

FactOrderDetail будет иметь запись для каждой строки заказа, в которой будет храниться информация о продукте, стоимости продукта, цене продажи продукта, количестве товаров, скидках на товары. и т. д.

Вам также может понадобиться DimOrderHeader, если есть фрагменты информации, не относящиеся к фактам, которые вы хотите сохранить, например, дату, когда заказ был принят, доставлен, оплачен.

person Marcus D    schedule 05.03.2016