繁体   English   中英

需要帮助建模事实表

[英]Need help modeling a fact table

我正在迈入数据仓库的第一步。

我已经购买了Kimball&Ross的优秀著作“ The Data Warehouse Toolkit-Third Edition”,为我解释了如何掌握基本概念。
今天,我已经开始设计我的第二个数据集市,但是我已经遇到了(可能是愚蠢的)问题。 假设我正在建模一个简单的销售事件:一个简单的事实表将是:

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放在事实表中,假装它只是一个退化维?

在维度和事实之间进行选择可能并非那么简单

正如您所描述的,就销售而言, 交货是一个单独的事件。 因此,交货应该是单独的事实表。

当然,如果您不需要额外的复杂性,则可以总是在维度中“投影”(可以这么说)。 例如,假设您只需要知道一些有关交货的简单事实:例如承运人和交货日期。 然后,您可以在SALES中使用DELIVERY_ID,然后在DELIVERY维度中注册这些信息。

但是,如果您必须记录交付的全部复杂性(相对于一次销售可能有两个或更多交付,而相对于一次交付可能有两个或更多销售),则需要两个事实表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM