我是否正确实施了类型1和7的SCD

问题描述

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_CODENAME更新,则意味着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

仍然更改为NAMETYPE列将导致简单的覆盖(没有新行)。

NAME会被SRKDURABLE_SRK覆盖吗?还是SCD 1吗?

SCD类型7

据我了解,来自Kimball's Design Tip #152SCD 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 (将#修改为@)