需要帮助建模事实表

时间:2014-10-10 13:40:10

标签: database-design data-modeling data-warehouse

我将我的第一步转移到数据仓库中。

我已经购买了优秀的图书"数据仓库工具包 - 第三版"作者:Kimball&罗斯,它解释了我如何把握基本概念 今天我开始设计我的第二个数据集市,但我已经遇到了一个(也许是愚蠢的)问题。假设我正在为一个简单的销售事件建模:一个简单的事实表将是:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | QUANTITY

每个维度都与其他维度存在多对多的关系,如书中和网络上所述 接下来,我想添加更多维度,例如运营商:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | QUANTITY

维度仍处于多对多关系中 现在,我要求添加很多(可能是十几个)关于交付的详细信息,比如一堆日期,路由,箱子和托盘的数量,各种标志等,所以我在考虑交付维度表。我的第一次尝试是:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | DELIVERY_ID | QUANTITY

但是......出乎意料的是,事实表现在已不再是多对多的关系了。所以我想:"好吧,我可以重构它,因为现在其他维度实际上是交付的属性",但它会变成

DELIVERY_ID | PRODUCT_ID | QUANTITY

我的事实表只有2个维度 现在,在其他情况下,我会将交付视为退化维度,但由于我必须将很多属性与之相关联,因此我不知道要遵循哪条路线:

  • 创建一个DELIVERY维度并重构事实表?
  • 把它们扔进事实表?
  • 创建一个DELIVERY维度并将DELIVERY_ID放在事实表格中,假装它只是一个退化维度?

在维度和事实之间做出选择可能并不那么简单

1 个答案:

答案 0 :(得分:1)

正如您所描述的那样,交付是与促销相关的单独事件。因此交付应该是一个单独的事实表。

当然,如果您不需要增加复杂性,您可以随时“投射”(可以说)维度中的事实。例如,假设您只需要了解一些关于交付的简单事实:例如承运人和交货日期。然后,您可以在SALES中使用DELIVERY_ID,并在DELIVERY维度中注册这些信息。

但是,如果您必须注册交货的完整复杂性(相对于一次销售可能有两次或更多次交货,相对于一次交货可能有两次或更多次交货),您需要两个事实表。