我不确定 Kimball Data-Warehouse 文献中是否回答了这个问题——我找不到答案。
假设您有一个表,其中包含几个 SCD2 感知列和一些 SCD1 列。问题很简单:当 SCD1 列发生更改时,哪些记录会更新?
您是否更改所有记录,当前记录和所有历史记录?还是只更改最近的(打开的)记录?我倾向于“全部”,而我所有的同事都坚持“仅最近”。
我可以给出我意见的唯一原因是,COUNT(DISTINCT ...)
当我在业务键列或 SCD1 列上运行它时,我希望给出相同的结果。
考虑一下,有两种特殊情况:如果记录没有当前版本,如果最近的记录超出范围并且没有新实例怎么办?如果我使用我的 SCD2 逻辑来准备将来会自动激活的记录怎么办?
如果我只更新最新的开放版本,那意味着我在第一个特殊情况下不会更改任何内容,而在另一种情况下,我需要更改所有未来(准备好的)记录。想一想……我相信“全部”是正确的答案。
谁能指出一个著名的白皮书网站(如 Kimball,Microsoft)给出答案?