将一个维度加入具有不同粒度的多个事实表
Posted
技术标签:
【中文标题】将一个维度加入具有不同粒度的多个事实表【英文标题】:Join one dimension to multiple fact tables with different grain 【发布时间】:2016-09-30 00:12:48 【问题描述】:我是维度数据建模的新手。我有一个维度和 2 个事实表:
使用代理键将一个事实表 (fact1) 连接到维度。这里没有问题。我似乎无法弄清楚将维度加入第二个事实表(fact2)的最佳方法是什么。如果是关系数据库设计,我会在 fact2 表上使用 NaturalKey2: (NaturalKey1 + NaturalKey2 使记录在维度表中唯一)。
即
DIMENSION
SurogateKey | NaturalKey1 | NaturalKey2 | Current
1 | a1 | b1 | 0
2 | a1 | b2 | 1
3 | a2 | b3 | 1
事实1
(fk to Dimension)
1
2
3
FACT2
a1 ?
a2 ?
我是否使用只有 NaturalKey2 的桥接维度并使用从该维度到 fact2 的 SK?类似的东西
维度 2
SurogateKey | NaturalKey2
1 | a1
2 | a2
【问题讨论】:
当问这样的问题时,最好使用这种方法:在业务中,“fact2”数据如何知道它属于哪个维度数据?什么是通用业务密钥?有没有办法让只有一个事实表来降低复杂性,因为两者似乎有一个共同的关键?为什么有一个维度的代理键?这将在业务中代表什么(没有其他规则可以匹配到维度中)? 在 DW 中不需要外键。请参阅“热插拔尺寸” 【参考方案1】:无论它适用于什么事实,您的维度都由代理键表示,因此它应该是事实 2 中出现的代理键。
最初,我没有发现您的问题的重点,您提到第二个事实是不同的。执行此操作的维度方法是在更高级别具有第二个维度,该维度仅具有适合该粒度的列。从字段的标题和内容对齐的意义上说,这两个维度都是“一致的”。
【讨论】:
以上是关于将一个维度加入具有不同粒度的多个事实表的主要内容,如果未能解决你的问题,请参考以下文章