如何在数据仓库中按顺序在多个产品中存储事实数据表

问题描述:

我试图为我的项目之一(销售订单)设计数据仓库的维度建模。我对这个概念很陌生。如何在数据仓库中按顺序在多个产品中存储事实数据表

到目前为止,我可以理解产品,客户和日期可以存储在维度表中,并且订单信息将位于事实表中。

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作为外键的另一个表中。

在此先感谢。

+0

你想从订单表头中保存什么信息?您在订单级别详细信息中创建一个事实,然后解决如何保存订单标题信息。例如,客户只出现在源系统的标题中,但在订单事实表中,它将针对所有单个产品订单重复。这没有问题。唯一的挑战是如果头上有总购物金额,则无法在多个产品记录中重复此操作。 –

+0

对此有两种主要的解决方法:1.按记录数除运输并将其分布到所有记录中; 2.添加另一条记录并假装航运是一种产品。无论您做什么,您都需要保留原始订单号码,以便衡量“每笔订单的平均销售额”和“每份订单的平均产品数量”等。无论如何,这种头/细节尺寸建模在互联网上被讨论为令人厌恶的。你为什么不做一些研究并提出具体问题。 –

+0

您应该使用订单行项目作为事实表的颗粒 –

这是一个经典案例,您应该(probbaly)有两个事实表 FactOrderHeader和FactOrderDetail。

FactOrderHeader将为每个订单创建一个记录,存储有关订单价值和任何订单级别折扣的信息;尽管在某些情况下它们可以表示为OrderDetail记录。

FactOrderDetail将为每个订单行记录一条记录,存储有关产品,产品成本,产品销售价格,商品数量,商品折扣的信息。等等。

如果您想要存储非正常的信息,例如订单被拍下,交付,付款的日期,您可能还需要一个DimOrderHeader。