9 关于数据仓库维度数据处理的方法探究系列——雪花维

 原创于2006年12月16日,2009年10月15日迁移至此。

 

雪花架构是星型架构的一个扩展,有多个表定义一个或多个维度。在雪花架构中,只将主维度表和事实数据表联接。其他维度表联接到主维度表。

5 雪花维概述

5.1概述

常 规维度是指那些既不是虚拟维度、父子维度,也不是数据挖掘维度的维度。与父子维度不同(其层次结构是不均衡层次结构),常规维度中的层次结构要么均衡层次 结构,要么是不齐整层次结构。常规维度包含的级别数目与定义时选择的列数目相同。这些级别一般按照常规到特定的顺序排列。 (微软 SQLServer2000联机帮助概念 )

常规维度可以基于多个联接表。如果一个常规维度基于多个表,而且它没有雪花架构,则将它添加到多维数据集中时将采用这种架构。如果一个常规维度基于单个表,而且用星型架构将该维度添加到多维数据集中,则该多维数据集将保留星型架构。 (微软 SQLServer2000联机帮助概念 )

因此雪花架构是星型架构的一个扩展,有多个表定义一个或多个维度。在雪花架构中,只将主维度表和事实数据表联接。其他维度表联接到主维度表。

5.2实现

事实上雪花维度既可以是由多个表联合组成的,也可以由一个表的多个有固定层次结构的;当然多个表也可以融合成为一个表或者视图,实际项目中也会这么做。

多个表的关联组合会带来一定的隐患,主要是键值不能匹配或者缺失,上级找不到下级,下级找不到父级,所以处理起来比较困难,当然通过表关联比较符合数据库的设计原则;通过将两个表放到一起就可以有效的缓解,数据不一致的情况。

对于两个不同的表的处理,请参见 3.3.1覆盖,只不过在完成表的处理之后,需要对这两张表进行视图合并,增加无键值时的缺省值。

当然也可以通过存储过程将两张表合并到一张表中,具体情况根据业务需求而实现。

代码

CREATE TABLE t_tmp_xxx

(

ID VARCHAR(20) NOT NULL,

SuperID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

CONSTRAINT PK_t_tmp_xxx PRIMARY KEY (ID)

)

go

CREATE TABLE t_tmp_super_xxx

(

SuperID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

CONSTRAINT PK_t_tmp_super_xxx PRIMARY KEY (SuperID)

)

go

CREATE TABLE t_dem_xxx

(

ID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

SuperID VARCHAR(20) NOT NULL,

SuperName VARCHAR(50),

CONSTRAINT PK_t_dem_xxx PRIMARY KEY (ID)

)

go

INSERT INTO t_tmp_xxx VALUES('1','1','a')
INSERT INTO t_tmp_xxx VALUES('2','2','b')
INSERT INTO t_tmp_xxx VALUES('3','3','c')
INSERT INTO t_tmp_super_xxx VALUES('2','bb')
INSERT INTO t_tmp_super_xxx VALUES('4','dd')

Go

CREATE VIEW v_dem_xxx AS

SELECT '-1' as ID,’ 缺省 ’ Name,'-1' SuperID, ‘ 缺省 ' SuperName

Union All

SELECT a.ID ID,a.name Name,

CASE WHEN b.superid IS NULL THEN '-1' ELSE b.superid END SuperID,

CASE WHEN b.superid IS NULL THEN’ 缺省 ' ELSE b.name END SuperName

FROM t_tmp_xxx a LEFT JOIN t_tmp_super_xxx b

ON a.SuperID=b.SuperID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python与大数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值