在维度建模的数据仓库中,有一个著名概念叫 Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,经常被简写成 SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化。这种随时间发生变化的维度一般称为缓慢变化维。
处理缓慢变化维的方法通常分为3中:
第一种方式是直接覆盖原值。这种处理最容易实现,但是没有保留历史数据,无法分析历史变化信息。
第二种方式是添加维度行。这种处理需要代理键的支持。实现方式是当有维度属性发生变化时,生成一条新的维度记录,主键是新分配的代理键,通过自然键可以和原维度记录保持关联。
Version Data:在维度表中增加一个新的Version Number字段,当数据发生更新时,通过更新这个字段跟踪历史版本的变化。
Flag Current:在维度表中增加一个新的字段Current,即当前标志,当数据发生变化时,更新Current字段来跟踪当前的有效值和历史信息。
Effective Date Range:通过在表中增加两个日期字段“生效日期”和“失效日期”来跟踪历史数据的变化。
第三种方式是添加属性列。这种处理的实现方式是对于需要分析历史信息的属性添加一列,来记录该属性变化前的值,而本属性字段直接跟新为新值。这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最近一次的变化信息。