将一个维度加入具有不同粒度的多个事实表

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 中出现的代理键。

最初,我没有发现您的问题的重点,您提到第二个事实是不同的。执行此操作的维度方法是在更高级别具有第二个维度,该维度仅具有适合该粒度的列。从字段的标题和内容对齐的意义上说,这两个维度都是“一致的”。

【讨论】:

以上是关于将一个维度加入具有不同粒度的多个事实表的主要内容,如果未能解决你的问题,请参考以下文章

DataWarehouse - 具有不同粒度/维度度量的事实表

事实和维度数据仓库 Datamart

维度建模简介

两个层次相同但粒度不同的事实表

如何使用不同谷物的事实表对日期维度进行建模

合并来自不同粒度维度的数据