加载中…
个人资料
心如止水
心如止水
  • 博客等级:
  • 博客积分:0
  • 博客访问:54,780
  • 关注人气:31
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

星型维度模型

(2010-11-09 22:47:30)
标签:

星型

维度

模型设计

it

分类: DataWareHouse

1、星型模型的组成

一个星型模型对应一个分析主题,它由一个事实表和一组维表组成。其中事实表是星型模型的核心,由分析变量和分析维度代理键组成,分析变量存放分析事实数据,分析维度代理键用于连接维表。维表是星型模型的外围,存放分析维度数据,由维的代理键、维的层次属性、维的描述信息组成。

2、星型维度模型设计的依据和步骤

星型维度模型设计的依据是《业务需求》、《数据源分析报告》、《需求分析报告》、《功能设计》,星型维度模型设计的步骤是从逻辑模型到物理模型。

3、星型维度模型设计方法

(1)星型维度逻辑模型设计过程

 ①根据业务分析主题,确定模型主题(如根据贷款收息分析主题,确定贷款收息模型;根据贷款欠息分析主题,确定贷款欠息模型等)。

 ②列出每个模型主题的分析量和分类量。

 ③设计事实表。事实表可以由分析量+分析维度代理键得到。

 ④设计维表。维表可以由维SK+层次DK+其他属性信息得到,其中维SK、层次DK和其他属性信息可以从各个业务分析主题中总结得到。

 ⑤设计对照表。根据源系统中数据项的取值与数据仓库中数据项的取值的对照关系得到,采用SAS的FORMAT技术可以方便地使用对照表。

 ⑥决定模型中每个字段的来源和算法。根据《数据源分析报告》,决定模型中每个字段来自哪个表哪个字段、在何种条件下得到、通过何种计算得到。

 ⑦决定表的分割。表的分割是时间和空间的权衡折衷,星型维度模型采用下列分割方法:按汇总粒度的分割,逐笔表、日表、月表、年表等;

按当前和历史分割,当前表、历史表;

按访问频度分割,高访问频度表、低访问频度表;

按变化频度分割,高变化频度表、低变化频度表。

(2)星型维度物理模型设计过程

 ①表定义:表名、设计者、数据量估计。

 ②字段定义:名称、类型、长度、主键、索引。

 ③表与表之间的关系定义。

4、星型维度模型设计考虑

星型维度模型设计应有时间效率考虑和空间效率考虑两个方面。

1.时间效率考虑

星型维度模型中对时间效率考虑主要体现在中间表的设计和按访问频度的不同分割表两方面。

 (1)中间表的设计

星型维度中间表的设计有利于并行处理、降低模块间的耦合性。中间表与事实表一一对应,用业务键而不是数据仓库的代理键,保存了对应事实表的新增事实数据;使用SAS的DAT步扫描数据源表一次,就能得到多张中间表;将每个中间表的业务键连接维表得到代理键,就能实现中间表到事实表的转换。这样,不仅不同数据源表抽取到中间表的过程可以并行处理,而且各个中间表到事实表的转换也可以并行处理。此外,每个模块间的耦合性降低了许多,模块的灵活性和可维护性得到大大的提高。

 (2)按访问频度的不同分割表

星型维度模型中维表或事实表的各项数据的访问频度常常是不同的。如果该维表或事实表的数据量较大,那么访问速度就会受到影响。如果将访问频度高的数据分离出来,放在不同的表中,就可以加快该部分数据的访问速度。                             

 2.空间效率考虑

星型维度模型对空间效率的考虑主要体现在应用级数据压缩设计和按变动频度的不同分割表两方面。

 (1)应用级数据压缩设计

星型维度模型的事实表和维表都保留历史信息。为使数据量不至于过大,事实表和维表都采用时间轴压缩设计,用有效开始日(EFFECTIVE_FROM)、有效截止日(EFFECTIVE_TO)来压缩这段时间内未发生变化的数据。

在使用压缩的历史数据时,若进行解压缩,必然既耗费时间又浪费空间。通过巧妙设计JOIN方法,就可以不经过解压缩而得到准确的历史数据。例如:事实表a和维表b都经过了时间轴压缩,现在事实表a需要JOIN维表b中相应时间点的信息,那么正确的结果应该是事实表a中的记录能够JOIN到维表b中所有在时间段上与之相交的记录,并出现表2所示的四种基本相交情况。

若将上述各种情况都写入SQL语句的WHERE条件,势必很复杂。经过对时间段交集的分析,可归纳出下列的WHERE条件:

a.effective_from <= b.effective_to and a.effective_to >= b.effective_from

就能够保证事实表和维表JOIN结果的正确。

 (2)按变动频度的不同分割表

星型维度模型中的各项数据变动频度常常是不同的,例如客户的开户许可证、法人代表等数据往往变动频度较小,而信用等级等数据可能变动频度较大。由于要保存历史数据的变动,变动频度不同的数据放在同一张表中容易造成数据的冗余。将变动频度较小的数据分离出来,放在不同的表中,就可以降低数据的冗余。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有