【问题标题】:Dates as an attribute in Star schema日期作为星型模式中的属性
【发布时间】:2022-01-26 19:22:14
【问题描述】:
所有,
我建立了一个 DWH 星型模式已经有一段时间了,现在数据库太多了 :) 快速提问。我们可以使用日期作为某些维度的属性吗?比如Product维度中,如果我们有product effective_date和retired_date,这些都可以作为属性包含在product维度中对吧?
还有一个单独的日期维度。
谢谢。
【问题讨论】:
标签:
database-design
data-warehouse
snowflake-schema
【解决方案1】:
也许正确的问题是维度表中的日期是否应该连接到 dimDate?
第一点:
这些属性可以被认为是事实,因为通常任何涉及日期的东西都是事实,因为它是时间敏感的。
因此,如果可能的话,我们可以将这些添加到事实表中。例如,这可能像 Fact.Product 或 Fact.ProductHistory 一样简单,但这实际上取决于您将如何分析数据。有时您甚至可能希望将它们直接添加到主事实表中,例如 Fact.Sales 或类似的东西。
第二点:
您必须意识到,添加关系需要时间来维护您的数据仓库。由于外键在 ETL 过程中可能会导致额外的开销,即使在加载数据时禁用它们,您也需要在再次启用它们后重新检查它们。
第三点:
您可以为每个日期属性创建一个专用的分隔日期维度
如果您确实希望将维度属性链接到日期维度,那么我发现为您的每个属性创建单独的日期维度表会更好。如果您的数据模型变得复杂,我会让您发现这样做的不便。
您可以将所有日期属性链接到同一个日期维度表,然后您会发现应用多个独立过滤器时会很困难。
如果您只想查看 X 个月添加的产品,但又想按购买月份汇总销售额,该怎么办?
使用单个日期维度意味着这个查询比它需要的要困难得多。如果您有单独的日期维度,这很容易做到。
你可以阅读更多关于role-playing dimensions的信息。