当前位置:首页 > 维度建模
维度建模的基本概念及过程
摘要:本文首先介绍维度模型中的维度表和事实表这2个基本构成要素的基础知识;其次,介绍设计维度模型的4个基本步骤;再次,围绕某银行为实现业务价值链数据集成的需要,介绍多维体系结构中的3个关键性概念:数据仓库总线结构、一致性维度、一致性事实。 关键词:维度表;事实表;维度模型设计过程;数据仓库总线结构;一致性维度;一致性事实。 引言: 与流行的说法不同,Ralph Kimball本人并没有定义“维度”和“事实”这样的术语。术语“维度”与“事实”,最初是20世纪60年代在一个由General Mills与Dartmouth大学主持的联合研究计划中提出的。70年代,AC Nielsen和IRI都一致地使用这些术语描述他们的数据发布应用,用现在更为准确的话来说,就是关于零售数据的维度数据集市(Data Mart)。在简明性成为生活方式的潮流之前的长时期内,早期的数据库垄断组织们致力于将这些概念用来简化用做分析的信息。他们意识到,除非数据库做得简单易用,否则没有人会用它。因此,在将可理解性和性能作为最高目标的驱动下,产生了维度模型的构造思想。
1 维度表和事实表
1.1 事实表
事实表是维度模型的基本表,其中如图所示存放有大量的业务性能度量值。力图将从一个业务处理过程得到的度量值数据存放在单个数据集市。由于度量值数据压倒性地成为任何数据集市的最大部分,因此应该避免在企业范围内的不同地方存储其拷贝。用术语“事实”代表一个业务度量值。可以设想一个作为例子的情形:查询某个客户在某个机构下某个产品合约账户的某个币种的某个时点余额,在各维度值(客户、产品合约、账户、机构、币种、日期)的交点处就可以得到一个度量值。维度值的列表给出了事实表的粒度定义,并确定出度量值的取值范围
第1页, 共14页
是什么。
事实表的一行对应一个度量值,一个度量值就是事实表的一行;事实表的所有度量值必须具有相同的粒度。最有用的事实是诸如账户余额这样的数字类型为可做加法的事实。可加性是至关重要的,因为数据仓库应用不仅仅只检索事实表的单行数据。相反,往往一次性带回数百、数千乃至数百万行的事实,并且处理这么多行的最有用的事就是将它们加起来。
当然,有些事实是半加性质的,而另外一些是非加性质的。半加性事实仅仅沿某些维度相加,例如销售占比,周期余额;而非加性事实根本就不能相加,例如状态。对于非加性事实,如果希望对行进行总结就不得不使用计数或平均数,或者降为一次一行地打印出全部事实行。 度量事实在理论上讲可以是文本形式的,不过这种情况很少出现。在大多数情况下,文本度量值可以是某种事物的描述并取自某个离散列表的值。设计者应该尽各种努力将文本度量值转换成维度,原因在于维度能够与其他文本维度属性更有效地关联起来,并且消耗少得多的空间。不能将冗余的文本信息存放在事实表内。除非文本对于事实表的每行来说都是唯一的,否则它应该归属到维度表中。真正的文本事实在数据仓库中是很少出现的,文本事实具有像自由文本内容那样的不可预见性内容,这几乎是不可能进行分析的。
所有事实表有两个或者两个以上的外关键字(如图中FK符号标记的部分),外关键字用于连接到维度表的主关键字。例如,事实表中的“产品合约关键字”总是匹配产品合约维度表的一个特定“产品合约关键字”。如果事实表中的所有关键字都能分别与对应维度表中的主关键字正确匹配,就可以说这些表满足引用完整性的要求。事实表要通过与之相连的维度表进行存取。
第2页, 共14页
事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。事务事实表用于承载事务数据,通常粒度比较低,例如产品交易事务事实、ATM交易事务事实;周期快照事实表用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表;累积快照事实表用来记录具有时间跨度的业务处理过程的整个过程的信息,通常这类事实表比较少见。这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。
1.2 维度表
维度表是事实表不可分割的部分。如图所示,维度表包含有业务的文字描述。在一个设计合理的维度模型中,维度表有许多列或者属性,这些属性给出对维度表的行所进行的描述。应该尽可能多地包括一些富有意义的文字性描述。对于维度表来说,包含50到100个属性的情形并不少见。维度表倾向于将行数做得相当少(通常少于100万行),而将列数做得特别大。每个维度用单一的主关键字(如图中PK符号标记的部分)进行定义,主关键字是确保同一与之相连的任何事实表之间存在引用完整性的基础。
维度属性是查询约束条件、成组与报表标签生成的基本来源。在查询与报表请求中,属性
第3页, 共14页
用by这个单词进行标识。例如,一个用户表示要按“产品合约编号”与“机构编号”来查看账户余额,那么“产品合约编号”与“机构编号”就必须是可用的维度属性。
维度表属性在数据仓库中承担着一个重大的角色。由于它们实际上是所有令人感兴趣的约束条件与报表标签的来源,因此成为使数据仓库变得易学易用的关键。在许多方面,数据仓库不过是维度属性的体现而已。数据仓库的能力直接与维度属性的质量和深度成正比。在提供详细的业务用语属性方面所花的时间越多,数据仓库就越好。在属性列值的给定方面所花的时间越多,数据仓库就越好。在保证属性列值的质量方面所花的时间越多,数据仓库就越好。
维度表是进入事实表的入口。丰富的维度属性给出了丰富的分析切割能力。维度给用户提供了使用数据仓库的接口。最好的属性是文本的和离散的。属性应该是真正的文字而不应是一些编码简写符号。应该通过用更为详细的文本属性取代编码,力求最大限度地减少编码在维度表中的使用。有时候在设计数据库时并不能很确定,从数据源析取出的一个数字型数据字段到底应该作为事实还是维度属性看待。通常可以这样来做出决定,即看字段是一个含有许多的取值并参与运算的度量值(当事实看待),还是一个多少变化不多并参与作为约束条件的离散取值的描述(当维属性看待)。
在维度类型中,有一种重要的维度称作为退化维度(Degenerate Dimension),这种维度指的是直接把一些简单的维度放在事实表中而不专门去做一个维度表。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度经常会和其他一些维度一起组合成事实表的主键。退化维度在分析中可以用来做分组使用。
1.3 维度表和事实表的融合
在理解了事实和维度表之后,现在就考虑将两个组块一起融合到维度模型中去的问题。如图所示,由数字型度量值组成的事实表连接到一组填满描述属性的维度表——这个星型特征结构通常被叫做星型连接方案。该术语可以追溯到最早的关系数据库时期。
第4页, 共14页
共分享92篇相关文档