维度建模(dimensional modeling)是数据仓库建设中的一种数据建模方法。Kimball 最先提出这一概念。
其最简单的描述就是,按照事实表,维度表来构建数据仓库,数据集市。这种方法的最被人广泛知晓的名字就是星型模式(Star-schema)。实体关系模型(E-R)建模通常用于为单位的所有进程创建一个复杂的模型。这种方法已被证实在创建高效的联机事务处理 (OLTP) 系统方面很有效。相反,维度建模针对零散的业务进程创建个别的模型。例如,销售信息可以创建为一个模型,库存可以创建为另一个模型,而客户帐户也可以创建为另一个模型。每个模型捕获事实数据表中的事实,以及那些事实在链接到事实数据表的维度表中的特性。由这些排列产生的架构称为星型模式或雪花模式,已被证实在数据仓库设计中很有效。
维度建模将信息组织到结构中,这些结构通常对应于分析者希望对数据仓库数据使用的查询方法。1999 年第三季度西北地区的食品销售额是多少?表示使用三个维度(产品、地理、时间)指定要汇总的信息。
星型模式之所以广泛被使用,在于针对各个维作了大量的预处理,如按照维进行预先的统计、分类、排序等。通过这些预处理,能够极大的提升数据仓库的处理能力。特别是针对 3NF 的建模方法,星型模式在性能上占据明显的优势。
同时,维度建模法的另外一个优点是,维度建模非常直观,紧紧围绕着业务模型,可以直观的反映出业务模型中的业务问题。不需要经过特别的抽象处理,即可以完成维度建模。这一点也是维度建模的优势。维度建模的优点可以总结如下:
a) 维度建模是可预测的标准框架。允许数据库系统和最终用户查询工具在数据方面生成强大的假设条件,这些数据主要在表现和性能方面起作用。
b) 星型连接模式的可预测框架能够忍受不可预知的用户行为变化。
c) 具有非常好的可扩展性,以便容纳不可预知的新数据源和新的设计决策。可以很方便在不改变模型粒度情况下,增加新的分析维度和事实,不需要重载数据,也不需要为了适应新的改变而重新编码。较好的扩展性意味着以前的所有应用都可以继续运行,并不会产生不同的结果。
但是,维度建模法的缺点也是非常明显的,由于在构建星型模式之前需要进行大量的数据预处理,因此会导致大量的数据处理工作。而且,当业务发生变化,需要重新进行维度的定义时,往往需要重新进行维度数据的预处理。而在这些与处理过程中,往往会导致大量的数据冗余。
另外一个维度建模法的缺点就是,如果只是依靠单纯的维度建模,不能保证数据来源的一致性和准确性,而且在数据仓库的底层,不是特别适用于维度建模的方法。
基本原则
原则1、载入详细的原子数据到维度结构中
维度建模应该使用最基础的原子数据进行填充,以支持不可预知的来自用户查询的过滤和分组请求,用户通常不希望每次只看到一个单一的记录,但是你无法预测用户想要掩盖哪些数据,想要显示哪些数据,如果只有汇总数据,那么你已经设定了数据的使用模式,当用户想要深入挖掘数据时他们就会遇到障碍。当然,原子数据也可以通过概要维度建模进行补充,但企业用户无法只在汇总数据上工作,他们需要原始数据回答不断变化的问题。
原则2、围绕业务流程构建维度模型
业务流程是组织执行的活动,它们代表可测量的事件,如下一个订单或做一次结算,业务流程通常会捕获或生成较早的与某个事件相关的性能指标,这些数据转换成事实后,每个业务流程都用一个原子事实表表示,除了单个流程事实表外,有时会从多个流程事实表合并成一个事实表,而且合并事实表是对单一流程事实表的一个很好的补充,并不能代替它们。
原则3、确保每个事实表都有一个与之关联的日期维度表
原则2中描述的可测量事件总有一个日期戳信息,每个事实表至少都有一个外键,关联到一个日期维度表,它的粒度就是一天,使用日历属性和非标准的关于测量事件日期的特性,如财务月和公司假日指示符,有时一个事实表中有多个日期外键。