事实表中的外键
Posted
技术标签:
【中文标题】事实表中的外键【英文标题】:Foreign Keys in Fact Tables 【发布时间】:2020-11-14 23:08:08 【问题描述】:将所有数据合并到一个事实表中是否更常见,例如:
-- MOVIE_SALE --
Year
Studio
Studio_CEO
Studio_Location
Studio_...
Movie_Name
Movie_Copyright
Movie_PrimaryLanguage
Amount
或者,对于包含该组信息的其他表的外键是否更常见和更好的做法,例如:
-- MOVIE_SALE --
Year
Studio_ID
Movie_ID
Amount
为什么一种方式比另一种更受欢迎?
【问题讨论】:
【参考方案1】:假设(基于您添加到问题中的标签)您询问的是 Kimball 维度建模,您给出的第一个示例不是有效的事实表,而第二个示例是。因此,毫无疑问,哪个可能是首选,因为第一个示例不是要考虑的候选对象。
更新 1
关于为什么这不是一个有效的事实表的问题的长答案(我希望这不会像它绝对不应该的那样显得傲慢)是你需要读一本书关于维度建模:The Definitive Guide to Dimensional Modeling。鉴于您的问题是关于维度建模的一些非常基本的概念,因此解释维度建模的工作原理对于本论坛来说太大了。
简短的回答是,在大多数情况下,事实表只能包含两种类型的列:
-
维度的外键
措施
为了完整起见,它可能包含的另外两种类型的列是:
-
审核列 - 您选择添加以跟踪记录活动的任何内容
退化维度:没有任何其他相关属性的单个属性,而这些属性通常会放在一个维度中
希望这有帮助吗?
【讨论】:
您能否解释一下为什么第一个不是有效的事实表?【参考方案2】:最好将数据建模为星型模式。
在您的情况下,事实表是 MovieSales。您的维度是日期、工作室和电影。
通常情况下,事实表中会包含更多数据,因此您不希望重复每一行的元数据。
【讨论】:
以上是关于事实表中的外键的主要内容,如果未能解决你的问题,请参考以下文章