萝卜-robbie

数据仓库系列-为什么要维度建模

凡是建设数据仓库,一定会提到维度建模方法。这一方法是Kimball最先提出的,其最简单的描述就是,按照事实表、维度表来构建数据仓库、数据集市。在维度建模方法体系中,维度是描述事实的角度,如日期、商品、地址等,事实是要度量的指标,如用户数、销售额等。按照一般书籍的介绍,维度建模还会分为星型模型、雪花模型等,各有优缺点,但很少直接回答一个问题,也就是数据仓库为什么要采用维度建模

这个问题的基本判断在于,数据是否要开放给业务人员使用?采用维度建模构建出来的数据库结构表更加符合普通人的直觉、易于被普通人所理解,从而有利于数据的推广使用。下面以超市收银小票为例说明常规的三范式模型和维度模型。

三范式的数据模型示意如下:

 

维度模型示意如下:

 

以上两个模型的最小数据粒度都是小票项目,可以容易看出来,维度模型是将关系模型的层次结构展开平铺而成。从上面的这个范例可以引出采用维度建模方法的基本理由,就是:

数据结构简单。在决定是否要采用维度建模之前,必须回答一个问题,“数据模型是否要开放给业务人员直接使用”,如果答案肯定,则应该采用维度建模的方法。维度模型这个概念有点学术化,但究其本质而言,是将层次化的数据结构展开为单一层次,有点类似于将一个业务过程的数据汇总到一个excel的sheet页中。

不过维度建模的代价也很明显,就是其灵活性较差,数据冗余较多,所以,在很多书中提出了一个折中的办法,即“雪花模型”,同时还煞有介事的对比了雪花模型与星型模型(即上面的示例)的优缺点,让很多初学者心中飘来了一个挥之不去的疑问,“既然雪花模型既有关系模型的优点,还有维度模型的优点,为什么还要存在星型模型呢”?。窃以为,这完全是多此一举的做法,维度建模追求的是使用简单,多增加一级关联,增加的使用复杂度就会增加不止一点,会给多数不懂技术的业务人员带来极大的障碍,是一种舍本逐末的做法

基于这种考虑,在建设数据仓库的过程中,明细层和集市层分别采用不同的建模方法,也就是:

明细层采用传统的三范式关系模型。这一层次的数据模型要将业务过程描述清楚,将源数据(即业务系统)中隐含的、有歧义的概念进行清晰化,如活跃用户、VIP用户等。该层次的数据模型追求的目标是灵活地表达业务过程,要保证数据一致性、唯一性、正确性,以尽量少的代价与源数据保持数据同步,同时该层次的数据模型不建议开给不懂技术的业务人员直接使用,因此,采用关系型的三范式模型是最佳的选择。

集市层采用维度模型。集市层是按照业务主题、分主题构建出来的、面向特定部门或人员的数据集合,该层次的数据模型会开放给业务人员使用,进行数据挖掘及业务分析。由于业务员多数不懂数据库技术,缺少将业务需求转换为关系型数据结构的逻辑思维,更写不出复杂的SQL语句,因此,越简单的数据模型,越能被他们所接受,因此,这个层次所构建出来的数据模型,要按照业务过程进行组织,每个事实表代表一个独立的业务过程,事实表之间不存在直接的依赖关系,这样业务人员可以很容易地将分析需求对应到事实表上,利用工具或手工写出简单的SQL,将统计数据提取出来进行分析。

以上,就是数据仓库采用维度建模和关系建模的基本判断。

posted on 2015-01-20 13:00  萝卜-robbie  阅读(...)  评论(...编辑  收藏

My Links

Blog Stats