数据仓库的创建和选型(详细篇)

简介
目前业界较为主流的是数据仓库厂商主要是 IBM 和 NCR,这两家公司的除了能够提供较为强大的数据仓库平台之外,也有各自的针对某个行业的数据模型。例如,在银行业,IBM 有自己的 BDWM(Banking data warehouse model),而 NCR 有自己的 FS-LDM 模型。在电信业,IBM 有 TDWM(Telecom Data warehouse model),而 NCR 有自己的 TS-LDM 模型。因此,我们看到,不同的公司有自己针对某个行业的理解,因此会有不同的公司针对某个行业的模型。而对于不同的行业,同一个公司也会有不同的模型,这主要取决于不同行业的不同业务特点。

本文主要的主线就是回答下面三个问题:

什么是数据模型
为什么需要数据模型
如何建设数据模型
最后,我们在本文的结尾给大家介绍了一个具体的数据仓库建模的样例,帮助大家来了解整个数据建模的过程。

一、 什么是数据模型

数据模型是抽象描述现实世界的一种工具和方法,是通过抽象的实体及实体之间联系的形式,来表示现实世界中事务的相互关系的一种映射。在这里,数据模型表现的抽象的是实体和实体之间的关系,通过对实体和实体之间关系的定义和描述,来表达实际的业务中具体的业务关系。

数据仓库模型是数据模型中针对特定的数据仓库应用系统的一种特定的数据模型,一般的来说,我们数据仓库模型分为几下几个层次,如图 1 所示。

clipboard.png

图 1. 数据仓库模型

通过上面的图形,我们能够很容易的看出在整个数据仓库得建模过程中,我们需要经历一般四个过程:

业务建模,生成业务模型,主要是业务层面的分解和程序化。
领域建模,生成领域模型,主要是对业务模型进行抽象处理,生成领域概念模型。
逻辑建模,生成逻辑模型,主要是对抽象实体进行实例化。
物理建模,生成物理模型,主要针对不同关系型数据库的物理化以及性能等一些具体的技术问题。

二、 为什么需要数据模型?

在数据仓库的建设中,我们一再强调需要数据模型,那么数据模型究竟为什么这么重要呢?首先我们需要了解整个数据仓库的建设的发展史。
数据仓库的发展大致经历了这样的三个过程:

1.简单报表阶段:解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。
2.数据集市阶段:根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现,能够提供对特定业务指导的数据,并且能够提供特定的领导决策数据。
3.数据仓库阶段:按照一定的数据模型,对整个企业的数据进行采集,整理,并且能够按照各个业务部门的需要,提供跨部门的,完全一致的业务报表数据,能够通过数据仓库生成对对业务具有指导性的数据,同时,为领导决策提供全面的数据支持。
通过数据仓库建设的发展阶段,我们能够看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。因此,数据模型的建设,对于我们数据仓库的建设,有着决定性的意义。

一般来说,数据模型的建设主要能够帮助我们解决以下的一些问题:

1.进行全面的业务梳理,改进业务流程。。通过业务模型的建设,我们应该能够全面了解该单位的业务架构图和整个业务的运行情况,能够将业务按照特定的规律进行分门别类和程序化,同时,帮助我们进一步的改进业务的流程,提高业务效率,指导我们的业务部门的生产。
2.建立全方位的数据视角,消灭信息孤岛和数据差异。,更为重要的是,通过数据模型的建设,能够保证整个企业的数据的一致性,各个部门之间数据的差异将会得到有效解决。
3.解决业务的变动和数据仓库的灵活性。通过数据模型的建设,能够很好的分离出底层技术的实现和上层业务的展现。
4.帮助数据仓库系统本身的建设。通过数据仓库的模型建设,开发人员和业务人员能够很容易的达成系统建设范围的界定,以及长期目标的规划,从而能够使整个项目组明确当前的任务,加快整个系统建设的速度。

三、 如何数据仓库建模
1.数据仓库建模方法
1)范式建模法(Third Normal Form,3NF)

范式建模法其实是我们在构建数据模型常用的一个方法,该方法的主要由 Inmon 所提倡,主要解决关系型数据库得数据存储,利用的一种技术层面上的方法。目前,我们在关系型数据库中的建模方法,大部分采用的是三范式建模法。一个符合第三范式的关系必须具有以下三个条件 :

每个属性值唯一,不具有多义性 ;
每个非主属性必须完全依赖于整个主键,而非主键的一部分 ;
每个非主属性不能依赖于其他关系中的属性,(这个其他属性是依赖主键的话,就是不能形成传递依赖关系)因为这样的话,这种属性应该归到其他关系中去。

2)维度建模法

维度建模法,Kimball 最先提出这一概念。其最简单的描述就是,按照事实表,维表来构建数据仓库,数据集市。这种方法的最被人广泛知晓的名字就是星型模式(Star-schema)。
在这里插入图片描述
上图的这个架构中是典型的星型架构。星型模式之所以广泛被使用,在于针对各个维作了大量的预处理,如按照维进行预先的统计、分类、排序等。通过这些预处理,能够极大的提升数据仓库的处理能力。特别是针对 3NF 的建模方法,星型模式在性能上占据明显的优势。

雪花模型也是维度建模中的一种选择。雪花模型的维度表可以拥有其他维度表的,虽然这种模型相比星型模型更规范一些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用。
同时,维度建模法的另外一个优点是,维度建模非常直观,紧紧围绕着业务模型,可以直观的反映出业务模型中的业务问题。不需要经过特别的抽象处理,即可以完成维度建模。这一点也是维度建模的优势。

但是,维度建模法的缺点也是非常明显的,由于在构建星型模式之前需要进行大量的数据预处理,因此会导致大量的数据处理工作。而且,当业务发生变化,需要重新进行维度的定义时,往往需要重新进行维度数据的预处理。而在这些与处理过程中,往往会导致大量的数据冗余。

另外一个维度建模法的缺点就是,如果只是依靠单纯的维度建模,不能保证数据来源的一致性和准确性,而且在数据仓库的底层,不是特别适用于维度建模的方法。

因此以笔者的观点看,维度建模的领域主要适用与数据集市层,它的最大的作用其实是为了解决数据仓库建模中的性能问题。维度建模很难能够提供一个完整地描述真实业务实体之间的复杂关系的抽象方法。

3)实体建模法

实体建模法并不是数据仓库建模中常见的一个方法,它来源于哲学的一个流派。从哲学的意义上说,客观世界应该是可以细分的,客观世界应该可以分成由一个个实体,以及实体与实体之间的关系组成。那么我们在数据仓库的建模过程中完全可以引入这个抽象的方法,将整个业务也可以划分成一个个的实体,而每个实体之间的关系,以及针对这些关系的说明就是我们数据建模需要做的工作。

虽然实体法粗看起来好像有一些抽象,其实理解起来很容易。即我们可以将任何一个业务过程划分成 3 个部分,实体,事件和说明,如下图所示:
在这里插入图片描述

上图表述的是一个抽象的含义,如果我们描述一个简单的事实:“小明开车去学校上学”。以这个业务事实为例,我们可以把“小明”,“学校”看成是一个实体,“上学”描述的是一个业务过程,我们在这里可以抽象为一个具体“事件”,而“开车去”则可以看成是事件“上学”的一个说明。

从上面的举例我们可以了解,我们使用的抽象归纳方法其实很简单,任何业务可以看成 3 个部分:

实体,主要指领域模型中特定的概念主体,指发生业务关系的对象。
事件,主要指概念主体之间完成一次业务流程的过程,特指特定的业务过程。
说明,主要是针对实体和事件的特殊说明。

由于实体建模法,能够很轻松的实现业务模型的划分,因此,在业务建模阶段和领域概念建模阶段,实体建模法有着广泛的应用。从笔者的经验来看,再没有现成的行业模型的情况下,我们可以采用实体建模的方法,和客户一起理清整个业务的模型,进行领域概念模型的划分,抽象出具体的业务概念,结合客户的使用特点,完全可以创建出一个符合自己需要的数据仓库模型来。

但是,实体建模法也有着自己先天的缺陷,由于实体说明法只是一种抽象客观世界的方法,因此,注定了该建模方法只能局限在业务建模和领域概念建模阶段。因此,到了逻辑建模阶段和物理建模阶段,则是范式建模和维度建模发挥长处的阶段。

因此,笔者建议读者在创建自己的数据仓库模型的时候,可以参考使用上述的三种数据仓库得建模方法,在各个不同阶段采用不同的方法,从而能够保证整个数据仓库建模的质量。
2. 两种创建数据仓库的方式?
根据其出现的先后顺序,主要分为2种模式:自顶向下(TOP-down),自底向上(Bottom-up).
1) 自顶向下(TOP-down):这种模式首先把OLTP数据通过ETL汇集到数据仓库中,然后再把数据通过复制的方式推进各个数据集市中,其优点在于:
1、数据来源固定,可以确保数据的完整性。
2、数据格式与单位一致,可以确保跨越不同数据集市进行分析的正确性。
3、数据集市可以保证有共享的字段。因为都是从数据仓库中分离出来的。
2)自底向上(Bottom-up):这种模式首先将OLTP数据通过ETL汇集到数据集市中,然后通过复制的方式提升到数据仓库中,其优点在于:
1、由于首先构建数据集市的工作相对简单,所以容易成功。
2、这种模式也是实现快速数据传送的原型。
3.数据仓库和数据集市:
数据仓库和数据集市的区别可从如下三个方面进行理解:
(1) 数据仓库向各个数据集市提供数据
(2) 几个部门的数据集市组成一个数据仓库
数据集市是在构建数据仓库的时候经常用到的一个词汇。如果说数据仓库是企业范围的,收集的是关于整个组织的主题,如顾客、商品、销售、资产和人员等方面的信息,那么数据集市则是包含企业范围数据的一个子集,例如之包含销售主题的信息,这样数据集市只对特定的用户是有用的,起范围限定于选定的主题。

自底向上Kimball(主流模式)
Kimball 模式从流程上看是是自底向上的,即从数据集市到数据仓库(先有数据集市再有数据仓库)的一种敏捷开发方法。对于Kimball模式,首先将OLTP数据通过ETL汇集到数据集市中,然后通过复制的方式提升到数据仓库中。

通常,Kimball都是以最终任务为导向。首先,在得到数据后需要先做数据的探索,尝试将数据按照目标先拆分出不同的表需求。其次,在明确数据依赖后将各个任务再通过ETL由Stage层转化到DM层。这里DM层数据则由若干个事实表和维度表组成。接着,在完成DM层的事实表维度表拆分后,数据集市一方面可以直接向BI环节输出数据了,另一方面可以先DW层输出数据,方便后续的多维分析。
Kimball往往意味着快速交付、敏捷迭代,不会对数据仓库架构做过多复杂的设计,在变换莫测的互联网行业,这种架构方式逐渐成为一种主流范式。

四、 数据仓库建模样例

上面介绍得是一些抽象得建模方法和理论,可能理解起来相对有些难度,因此,笔者在这里举一个例子,读者可以跟着我们的这个样例,来初步了解整个数据仓库建模的大概过程。

熟悉社保行业的读者可以知道,目前我们国家的社保主要分为养老,失业,工伤,生育,医疗保险和劳动力市场这 6 大块主要业务领域。

1.业务建模阶段

基于以上的背景介绍,我们在业务建模阶段,就很容易来划分相应的业务。因此,在业务建模阶段,我们基本上确定我们本次数据仓库建设的目标,建设的方法,以及长远规划等。我们将整个业务很清楚地划分成了几个大的业务主线,例如:养老,失业,工伤,生育,医疗,劳动力等着几个大的部分,然后我们可以根据这些大的模块,在每个业务主线内,考虑具体的业务主线内需要分析的业务主题。
在这里插入图片描述
因此,业务建模阶段其实是一次和业务人员梳理业务的过程,在这个过程中,不仅能帮助我们技术人员更好的理解业务,另一方面,也能够发现业务流程中的一些不合理的环节,加以改善和改进。同时,业务建模阶段的另一个重要工作就是确定我们数据建模的范围,例如:在某些数据准备不够充分的业务模块内,我们可以考虑先不建设相应的数据模型。等到条件充分成熟的情况下,我们可以再来考虑数据建模的问题。

2.领域概念建模阶段

领域概念建模阶段是数据仓库数据建模的一个重要阶段,由于我们在业务建模阶段已经完全理清相应的业务范围和流程,因此,我们在这个领域概念建模阶段的最主要的工作就是进行概念的抽象,整个领域概念建模的工作层次如下图所示:
在这里插入图片描述
从上图我们可以清楚地看到,领域概念建模就是运用了实体建模法,从纷繁的业务表象背后通过实体建模法,抽象出实体,事件,说明等抽象的实体,从而找出业务表象后抽象实体间的相互的关联性,保证了我们数据仓库数据按照数据模型所能达到的一致性和关联性。
从图上看,我们可以把整个抽象过程分为四个层次,分别为:

抽象方法层,整个数据模型的核心方法,领域概念建模的实体的划分通过这种抽象方法来实现。
领域概念层,这是我们整个数据模型的核心部分,因为不同程度的抽象方法,决定了我们领域概念的不同。例如:在这里,我们可以使用“参与方”这个概念,同时,你也可以把他分成三个概念:“个人”,“公司”,和“经办机构”这三个概念。
从这张图我们可以看出,具体的业务层,其实只是领域概念模型中实体之间的一些不同组合而已。
业务主线层,这个层次主要划分大的业务领域,一般在业务建模阶段即已经完成这方面的划分。我们一般通过这种大的业务主线来划分整个业务模型大的框架。通过领域概念建模,数据仓库的模型已经被抽象成一个个的实体,模型的框架已经搭建完毕,下面的工作就是给这些框架注入有效的肌体。

3.逻辑建模阶段

通过领域概念建模之后,虽然模型的框架已经完成,但是还有很多细致的工作需要完成。一般在这个阶段,我们还需要做非常多的工作,主要包括:

实例话每一个抽象的实体,例如:在上面的概念模型之后,我们需要对“人”和“公司”等这些抽象实体进行实例化。主要是,我们需要考虑“人”的属性包括那些,在业务模块中,用到的所有跟“人”相关的属性是哪些,我们都需要将这些属性附着在我们数据模型的“人”这个实体上,例如“人”得年龄,性别,受教育程度等等。同理,我们对其他属性同样需要做这个工作。
找出抽象实体间的联系,并将其实例化。这里,我们主要考虑是“事件”这个抽象概念的实例话,例如:对于养老金征缴这个“事件”的属性得考虑,对于失业劳动者培训这个“事件”的属性得考虑等等。
找出抽象事件的关系,并对其进行说明。在这里我们主要是要针对“事件”进行完善的“说明”。例如:对于“事件”中的地域,事件等因素的考量等等。
总而言之,在逻辑建模阶段,我们主要考虑得是抽象实体的一些细致的属性。通过逻辑建模阶段,我们才能够将整个概念模型完整串联成一个有机的实体,才能够完整的表达出业务之间的关联性。

在这个阶段,笔者建议大家可以参考 3NF 的建模方法,表达出实体的属性,以及实体与实体之间的联系。例如:在这个阶段,我们可以通过采用 ERWIN 等建模工具等作出符合 3NF 的关系型数据模型来。

4.物理建模阶段

物理建模阶段是整个数据建模的最后一个过程,这个过程其实是将前面的逻辑数据模型落地的一个过程。考虑到数据仓库平台的不同,因此,数据模型得物理建模过程可能会稍微有一些不同,在这个阶段我们主要的工作:

生成创建表的脚本。不同的数据仓库平台可能生成不同的脚本。
针对不同的数据仓库平台,进行一些相应的优化工作
生成一些事实表,维表
针对数据仓库的 ETL 和元数据管理的需要,生成一些数据仓库维护的表,例如:日志表等。
经过物理建模阶段,整个数据仓库的模型已经全部完成,我们可以按照自己的设计来针对当前的行业创建满足自己需要的数据模型来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值