一尘不染

数据仓库-缓慢更改具有多对多关系的维度

sql

举例来说,假设我有一个包含两个维度和一个度量的事实表

FactMoney表


ProjectKey int

PersonKey int

现金金额


这两个维度的定义如下:

DimProject(类型0尺寸-即静态)


ProjectKey int

项目名称varchar(50)


DimPerson(类型2缓慢变化的尺寸)


PersonKey int

PersonNaturalKey int

PersonName varchar(50)

EffectiveStartDate日期时间

EffectiveEndDate日期时间

IsCurrent位


到目前为止非常简单。现在,我将介绍“人员类别”概念。

点心类别


CategoryKey整数

CategoryName varchar(50)


并在DimPerson和DimCategory之间建立M2M关系

BridgePerson类别


PersonKey int

CategoryKey整数


所以-人们可以有1..n个类别。

我的问题是-
由于Person是一个缓慢变化的维度,当一个人的名字更改时,我们添加一个新的person行并更新我们的生效日期,并且它是当前标记,没什么大不了的。

但是,我们如何处理此人的类别?每当出现新的人员版本时,我们是否需要向桥表添加更多行?

作为推论,如果一个人的类别发生变化,这是否意味着我们需要在person表中创建一个新行?


阅读 184

收藏
2021-03-08

共1个答案

一尘不染

关于您的主要问题:我想说您需要在类别表中添加类别(可能是从老人行中复制它们)。因此,您可以继续对处于新(更改)状态的人员进行分类。

关于类别更改:我宁愿不添加人员行,而是在类别表中添加初始有效期和到期日期。这样,每个类别都可以单独更改。但是您需要注意不要进行时间点查询,因为这样会使类别过多

2021-03-08