您的位置:首页 > 其它

缓慢变化维--Slowly Changing Dimensions

2016-09-28 15:45 204 查看
       在数据仓库建模中我们常常会涉及到缓慢变化维(Slowly Changing Dimensions 简称SCD)的设计, 缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,是随着时间的流失做缓慢的变化,所以处理这种历史的变化的维度我们称之为处理缓慢变化维。特别是在数据仓库设计中,我们的重点就是设计维度表跟事实表。所以维度表设计的好坏影响着整个数据仓库的搭建和后续报表展现的灵活性和完整性。

       缓慢变化维度一般有以下几种实现方式:

       1、第一种方式(TYPE 1)是新值直接覆盖原值即改写属性值,这种方法最简单,但是没有历史记录,无法分析历史变化信息。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

            

             修改后->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      上海

 

       2、第二种方式(TYPE 2)是添加维度行。可以创建一个代理健,并设置成主键,这样自然健可以和原维度和新维度的都保持关联,后续的关联查询的取舍就根据需求的定义。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

 

             修改后->

             ID(代理键)   用户 ID       用户姓名       出生日期          住址     

             1                   1001            张三            1987-01-01      北京

             2                   1001            张三            1987-01-01      上海

            

       3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

            

             修改后->

             用户 ID       用户姓名       出生日期          原住址     现住址    

             1001            张三              1987-01-01     北京        上海

       

       3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

            

             修改后->

             用户 ID       用户姓名       出生日期          原住址     现住址    

             1001            张三              1987-01-01     北京        上海

 

       4、第四种方式(TYPE 4)是添加历史表。将最新的维度数据与历史维度数据分不同的表存放。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

            

             修改后->

             最新维度表

             用户 ID       用户姓名       出生日期          住址    

             1001            张三              1987-01-01     上海

             历史维度表

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

       5、第五种方式(TYPE 5)混合模式可预见的多重变化。

       6、第六种方式(TYPE 6)非常规混合模型,新增一个标识字段,例如:flag(0 历史数据,1 最新数据)但是这类数据一般会有个创建时间搭配使用,不然历史数据的先后顺序就无法确认了。 还有一种可以加一个版本号,类似一个序列号,没增加一条就+1,数据大概是1,2,3,4,5这样版本号最大的数据即使最新的那条。

       7、第七种方式(TYPE 7)混合模式之不可预见的单重变化。

             e.g.

             修改前->

             用户 ID       用户姓名       出生日期          住址     

             1001            张三              1987-01-01      北京

            

             修改后->

            ID(代理健)   用户 ID       用户姓名       出生日期          原住址(开户时间)     现住址(有效时间)    

            1                    1001            张三            1987-01-01     北京 (2016-01-01)    上海(2016-02-01)  -- 历史数据

            2                    1001            张三            1987-01-01     上海 (2016-02-02)    天津(2016-03-02)  -- 历史数据

            3                    1001            张三            1987-01-01     天津 (2016-03-03)    重庆(9999-12-31)  -- 最新数据

      

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据仓库