自然键和事实表

Natural Key and Fact tables

我是维度建模新手,以下疑惑相信各位大神能帮帮我。

在生产系统中,我有一个交易 table,example.The 的销售 table 唯一标识符是一个名为 SaleId 的主键。 示例:

我的疑问是,在对事实 table 进行建模时,SaleID 是否应该作为 NaturalKey 包含在事实 table 中?

Fact table 也应该有 SurrogateKey 吗?

请随时将任何 link 发给我作为参考。 提前致谢

从技术上讲,它可能不是自然键 - 它看起来确实是系统生成的。但是,有时将系统生成的 ID 存储在事实中以用作退化维度是非常有效的。通常,在这些情况下,业务用户确实看到了该系统生成的 ID(订单号、发票号、采购订单号等),或者没有其他有用的方法来识别可以有效地组合在一起的某些行.

如果您的 BI 解决方案的用户可能希望能够深入了解信息并通过销售查看信息,那么 SaleID 很可能是这种处理的一个很好的候选者。想一想是否有任何其他方法可以让他们达到这个水平——一个客户是否可以在同一天与两个不同的销售相关联?如果是这样,您的用户是否愿意将它们视为两个单独的销售?您可能需要与他们交谈以找出对他们有用的内容。如果由于某种原因您无法得到明确的答案,我会说保留它 - 没有什么坏处,如果不使用它,您可以随时将其删除。

以下是 Kimball 小组对退化维度的看法,以防您完全不清楚它们的工作原理:

http://www.kimballgroup.com/2003/06/design-tip-46-another-look-at-degenerate-dimensions/


据事实 table 代理键 - 我总是使用它们。正如 Kimball 的 Design Tip #81 所指出的那样,它们有时很有用,而且我宁愿在一开始就放入而不使用它,也不愿后来意识到拥有它会很有用。第 2 点 - 您可能希望通过插入新行和删除旧行来进行更新 - 当然适用于我所做的工作。

事实 table 中对主键的要求取决于事实 table 的类型。永远不会更新的交易事实不需要它。周期性快照可能不需要它,除非当前周期是最新的度量。积累快照肯定需要它