【发布时间】:2014-12-05 16:59:54
【问题描述】:
我正在将我的第一步转移到数据仓库。
我购买了 Kimball & Ross 的优秀书籍“数据仓库工具包 - 第三版”,它向我解释了如何掌握基本概念。
今天我已经开始设计我的第二个数据集市,但我已经陷入了一个(也许是愚蠢的)问题。假设我正在为一个简单的销售事件建模:一个简单的事实表将是:
DATE_ID | CUSTOMER_ID | PRODUCT_ID | QUANTITY
每个维度都与其他维度存在多对多关系,正如书中和网络中所解释的那样。
接下来,我想添加更多维度,例如运营商:
DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | QUANTITY
维度仍然是多对多的关系。
现在,我被要求添加很多(可能是十几个或更多)关于交货的细节,比如一堆日期、路线、箱子和托盘的数量、各种标志等,所以我在考虑一个 DELIVERY 维度表.我的第一次尝试是:
DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | DELIVERY_ID | QUANTITY
但是...令人惊讶的是,事实表现在不再是多对多关系了。所以我想:“好吧,我可以重构它,因为现在其他维度实际上是交付的属性”,但它会变成
DELIVERY_ID | PRODUCT_ID | QUANTITY
我的事实表只有 2 个维度。
现在,在其他情况下,我会将交付视为退化维度,但由于我必须将很多属性与它相关联,所以我不知道该遵循哪条路线:
- 创建一个 DELIVERY 维度并重构事实表?
- 将它们放入事实表中?
- 创建一个 DELIVERY 维度并将 DELIVERY_ID 放入事实表中,假装它只是一个退化维度?
也许在维度和事实之间做出选择并不那么简单
【问题讨论】:
-
来自 IBM 红皮书的更多免费数据仓库设计资源链接在 this SO answer。
标签: database-design data-modeling data-warehouse