问题描述
SCD类型1
假设我已经根据来自操作系统的以下数据构建了SCD类型1:
ID | CHANNEL_CODE | NAME | TYPE
1 | A | X | 0
2 | B | Y | 1
由于Surrogate Keys are preferable even for SCD type 1,我们将丢弃ID
列,并根据自然键(SRK
)生成CHANNEL_CODE
:
SRK | CHANNEL_CODE | NAME | TYPE
11 | A | X | 0
12 | B | Y | 1
如果进行CHANNEL_CODE
或NAME
更新,则意味着TYPE
永远不会改变-会覆盖。
这是SCD类型1的正确标准实现吗?
SCD 1 +持久密钥
由于SIM卡或信用卡的更改,重复项,源系统的集成,业务原因等,自然密钥可能会发生更改。从Kimball's Design Tip #147开始,我知道问题是通过耐用解决的srk。
意味着,操作系统必须向我发送一个事件,例如:“从现在开始CHANNEL_CODE = A是CHANNEL_CODE = C”。因此,我应该具有以下数据(事实表包含两个srk):
DURABLE_SRK | SRK | CHANNEL_CODE | NAME | TYPE
11 | 11 | A | X | 0
12 | 12 | B | Y | 1
11 | 13 | C | X | 0
仍然更改为NAME
或TYPE
列将导致简单的覆盖(没有新行)。
NAME
会被SRK
或DURABLE_SRK
覆盖吗?还是SCD 1吗?
SCD类型7
据我了解,来自Kimball's Design Tip #152,SCD 7 = SCD 1 + durable key + SCD 2 (history for not natural key columns)
。因此,SCD类型7应该在每次列更新时生成一个新行。例如,在NAME update from X to Z where CHANNEL_CODE=C
上:
DURABLE_SRK | SRK | CHANNEL_CODE | NAME | TYPE | EFFECTIVE_START_DATE | EXPIDATION_DATE | IS_CURRENT_IND
11 | 11 | A | X | 0 | 2020-05-02 | 2020-06-12 | False
12 | 12 | B | Y | 1 | 2020-01-12 | 2100-01-01 | True
11 | 13 | C | X | 0 | 2020-06-12 | 2020-08-15 | False
11 | 13 | C | Z | 0 | 2020-08-15 | 2100-01-01 | True
这是SCD 7类的正确实现吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)