【问题标题】: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

为什么一种方式比另一种更受欢迎?

【问题讨论】:

    标签: ssas olap cube olap-cube dimensional-modeling


    【解决方案1】:

    假设(基于您添加到问题中的标签)您询问的是 Kimball 维度建模,您给出的第一个示例不是有效的事实表,而第二个示例是。因此,毫无疑问,哪个可能是首选,因为第一个示例不是要考虑的候选对象。

    更新 1

    关于为什么这不是一个有效的事实表的问题的长答案(我希望这不会像它绝对不应该的那样显得傲慢)是你需要读一本书关于维度建模:The Definitive Guide to Dimensional Modeling。鉴于您的问题是关于维度建模的一些非常基本的概念,因此解释维度建模的工作原理对于本论坛来说太大了。

    简短的回答是,在大多数情况下,事实表只能包含两种类型的列:

    1. 维度的外键
    2. 措施

    为了完整起见,它可能包含的另外两种类型的列是:

    1. 审核列 - 您选择添加以跟踪记录活动的任何内容
    2. 退化维度:没有任何其他相关属性的单个属性,而这些属性通常会放在一个维度中

    希望这有帮助吗?

    【讨论】:

    • 您能否解释一下为什么第一个不是有效的事实表?
    【解决方案2】:

    最好将数据建模为星型模式。

    在您的情况下,事实表是 MovieSales。您的维度是日期、工作室和电影。

    通常情况下,事实表中会包含更多数据,因此您不希望重复每一行的元数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多