数据仓库的几种建模方法

背景

接着上个文章数据仓库简述,想写一篇数据仓库经常使用模型的文章,可是本身对数据仓库模型的理解程度和建设架构并无下面这个技术专家理解的深入,而且本身去组织语言,可能会有不许确的地方,怕影响你们对数据仓库建模的理解,数据仓库属于一个工程学科,在设计上要体验出工程严谨性,因此此次向你们推荐这篇文章,毕竟IBM在数据仓库和数据集市方面已经作得很成熟了,已经有成型的商业数据仓库组件,这篇文章写的很好,可让你们很好的理解数据仓库。前端

版权

做者 周三保(zhousb@cn.ibm.com) IBM 软件部信息技术专家.
原文地址 https://www.ibm.com/developer...数据库

简介

本文的主要内容不是介绍现有的比较流行的主要行业的一些数据模型,而是将笔者在数据仓库建设项目中的一些经验,在这里分享给你们。但愿帮助你们在数据仓库项目建设中总结出一套可以合乎目前业界规范的,知足大部分行业数据仓库建设标准的一种方法。架构

所谓水无定势,兵无常法。不一样的行业,有不一样行业的特色,所以,从业务角度看,其相应的数据模型是千差万别的。目前业界较为主流的是数据仓库厂商主要是 IBM 和 NCR,这两家公司的除了可以提供较为强大的数据仓库平台以外,也有各自的针对某个行业的数据模型。框架

例如,在银行业,IBM 有本身的 BDWM(Banking data warehouse model),而 NCR 有本身的 FS-LDM 模型。在电信业,IBM 有 TDWM(Telecom Data warehouse model),而 NCR 有本身的 TS-LDM 模型。所以,咱们看到,不一样的公司有本身针对某个行业的理解,所以会有不一样的公司针对某个行业的模型。而对于不一样的行业,同一个公司也会有不一样的模型,这主要取决于不一样行业的不一样业务特色。工具

举例来讲,IBM 的 TDWM 的模型总共包含了如下 9 个概念,以下图:性能

图 1. IBM 的 TDWM 概念模型优化

clipboard.png

可能不少人要问,为何大家的模型是 9 个概念而不是 10 个,11 个呢?大家的数据仓库模型的依据又是什么?其实这是咱们在给客户介绍咱们的数据模型时,常常被问到的一个问题,我但愿读者在读完本文时,可以找到本身的答案。spa

虽然每一个行业有本身的模型,可是,咱们发现,不一样行业的数据模型,在数据建模的方法上,却都有着共通的基本特色。设计

本文的主要目的之一,就是但愿读者可以经过对本文的阅读,同时,结合本身对数据仓库建设的经验,在建设数据仓库的时候可以总结出一套适合本身的建模方法,可以更好的帮助客户去发挥数据仓库的做用。3d

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

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

1、 什么是数据模型

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

数据仓库模型是数据模型中针对特定的数据仓库应用系统的一种特定的数据模型,通常的来讲,咱们数据仓库模型分为几下几个层次,如图 2 所示。

clipboard.png

图 2. 数据仓库模型

经过上面的图形,咱们可以很容易的看出在整个数据仓库得建模过程当中,咱们须要经历通常四个过程:

业务建模,生成业务模型,主要解决业务层面的分解和程序化。
领域建模,生成领域模型,主要是对业务模型进行抽象处理,生成领域概念模型。
逻辑建模,生成逻辑模型,主要是将领域模型的概念实体以及实体之间的关系进行数据库层次的逻辑化。
物理建模,生成物理模型,主要解决,逻辑模型针对不一样关系型数据库的物理化以及性能等一些具体的技术问题。
所以,在整个数据仓库的模型的设计和架构中,既涉及到业务知识,也涉及到了具体的技术,咱们既须要了解丰富的行业经验,同时,也须要必定的信息技术来帮助咱们实现咱们的数据模型,最重要的是,咱们还须要一个很是适用的方法论,来指导咱们本身针对咱们的业务进行抽象,处理,生成各个阶段的模型。

2、 为何须要数据模型

在数据仓库的建设中,咱们一再强调须要数据模型,那么数据模型究竟为何这么重要呢?首先咱们须要了解整个数据仓库的建设的发展史。

数据仓库的发展大体经历了这样的三个过程:

简单报表阶段:这个阶段,系统的主要目标是解决一些平常的工做中业务人员须要的报表,以及生成一些简单的可以帮助领导进行决策所须要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。
数据集市阶段:这个阶段,主要是根据某个业务部门的须要,进行必定的数据的采集,整理,按照业务人员的须要,进行多维报表的展示,可以提供对特定业务指导的数据,而且可以提供特定的领导决策数据。
数据仓库阶段:这个阶段,主要是按照必定的数据模型,对整个企业的数据进行采集,整理,而且可以按照各个业务部门的须要,提供跨部门的,彻底一致的业务报表数据,可以经过数据仓库生成对对业务具备指导性的数据,同时,为领导决策提供全面的数据支持。
经过数据仓库建设的发展阶段,咱们可以看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。所以,数据模型的建设,对于咱们数据仓库的建设,有着决定性的意义。

通常来讲,数据模型的建设主要可以帮助咱们解决如下的一些问题:

进行全面的业务梳理,改进业务流程。在业务模型建设的阶段,可以帮助咱们的企业或者是管理机关对本单位的业务进行全面的梳理。经过业务模型的建设,咱们应该可以全面了解该单位的业务架构图和整个业务的运行状况,可以将业务按照特定的规律进行分门别类和程序化,同时,帮助咱们进一步的改进业务的流程,提升业务效率,指导咱们的业务部门的生产。
创建全方位的数据视角,消灭信息孤岛和数据差别。经过数据仓库的模型建设,可以为企业提供一个总体的数据视角,再也不是各个部门只是关注本身的数据,并且经过模型的建设,勾勒出了部门之间内在的联系,帮助消灭各个部门之间的信息孤岛的问题,更为重要的是,经过数据模型的建设,可以保证整个企业的数据的一致性,各个部门之间数据的差别将会获得有效解决。
解决业务的变更和数据仓库的灵活性。经过数据模型的建设,可以很好的分离出底层技术的实现和上层业务的展示。当上层业务发生变化时,经过数据模型,底层的技术实现能够很是轻松的完成业务的变更,从而达到整个数据仓库系统的灵活性。
帮助数据仓库系统自己的建设。经过数据仓库的模型建设,开发人员和业务人员可以很容易的达成系统建设范围的界定,以及长期目标的规划,从而可以使整个项目组明确当前的任务,加快整个系统建设的速度。
3、 如何建设数据模型

建设数据模型既然是整个数据仓库建设中一个很是重要的关键部分,那么,怎么建设咱们的数据仓库模型就是咱们须要解决的一个问题。这里咱们将要详细介绍如何建立适合本身的数据模型。

1) 数据仓库数据模型架构

数据仓库的数据模型的架构和数据仓库的总体架构是紧密关联在一块儿的,咱们首先来了解一下整个数据仓库的数据模型应该包含的几个部分。从下图咱们能够很清楚地看到,整个数据模型的架构分红 5 大部分,每一个部分其实都有其独特的功能。

图 3. 数据仓库数据模型架构

clipboard.png

从上图咱们能够看出,整个数据仓库的数据模型能够分为大概 5 大部分:

系统记录域(System of Record):这部分是主要的数据仓库业务数据存储区,数据模型在这里保证了数据的一致性。
内部管理域(Housekeeping):这部分主要存储数据仓库用于内部管理的元数据,数据模型在这里可以帮助进行统一的元数据的管理。
汇总域(Summary of Area):这部分数据来自于系统记录域的汇总,数据模型在这里保证了分析域的主题分析的性能,知足了部分的报表查询。
分析域(Analysis Area):这部分数据模型主要用于各个业务部分的具体的主题业务分析。这部分数据模型能够单独存储在相应的数据集市中。
反馈域(Feedback Area):可选项,这部分数据模型主要用于相应前端的反馈数据,数据仓库能够视业务的须要设置这一区域。
经过对整个数据仓库模型的数据区域的划分,咱们能够了解到,一个好的数据模型,不只仅是对业务进行抽象划分,并且对实现技术也进行具体的指导,它应该涵盖了从业务到实现技术的各个部分。

2) 数据仓库建模阶段划分

咱们前面介绍了数据仓库模型的几个层次,下面咱们讲一下,针对这几个层次的不一样阶段的数据建模的工做的主要内容:

图 4. 数据仓库建模阶段划分

clipboard.png

从上图咱们能够清楚地看出,数据仓库的数据建模大体分为四个阶段:

  1. 业务建模,这部分建模工做,主要包含如下几个部分:

划分整个单位的业务,通常按照业务部门的划分,进行各个部分之间业务工做的界定,理清各业务部门之间的关系。
深刻了解各个业务部门的内具体业务流程并将其程序化。
提出修改和改进业务部门工做流程的方法并程序化。
数据建模的范围界定,整个数据仓库项目的目标和阶段划分。

  1. 领域概念建模,这部分得建模工做,主要包含如下几个部分:

抽取关键业务概念,并将之抽象化。
将业务概念分组,按照业务主线聚合相似的分组概念。
细化分组概念,理清分组概念内的业务流程并抽象化。
理清分组概念之间的关联,造成完整的领域概念模型。

  1. 逻辑建模,这部分的建模工做,主要包含如下几个部分:

业务概念实体化,并考虑其具体的属性
事件实体化,并考虑其属性内容
说明实体化,并考虑其属性内容

  1. 物理建模,这部分得建模工做,主要包含如下几个部分:

针对特定物理化平台,作出相应的技术调整
针对模型的性能考虑,对特定平台做出相应的调整
针对管理的须要,结合特定的平台,作出相应的调整
生成最后的执行脚本,并完善之。
从咱们上面对数据仓库的数据建模阶段的各个阶段的划分,咱们可以了解到整个数据仓库建模的主要工做和工做量,但愿可以对咱们在实际的项目建设可以有所帮助。

3) 数据仓库建模方法

大千世界,表面看五彩缤纷,实质上,万物都遵循其自有的法则。数据仓库的建模方法一样也有不少种,每一种建模方法其实表明了哲学上的一个观点,表明了一种概括,归纳世界的一种方法。目前业界较为流行的数据仓库的建模方法很是多,这里主要介绍范式建模法,维度建模法,实体建模法等几种方法,每种方法其实从本质上讲就是从不一样的角度看咱们业务中的问题,无论从技术层面仍是业务层面,其实表明的是哲学上的一种世界观。咱们下面给你们详细介绍一下这些建模方法。

  1. 范式建模法(Third Normal Form,3NF)

范式建模法实际上是咱们在构建数据模型经常使用的一个方法,该方法的主要由 Inmon 所提倡,主要解决关系型数据库得数据存储,利用的一种技术层面上的方法。目前,咱们在关系型数据库中的建模方法,大部分采用的是三范式建模法。

范式是数据库逻辑模型设计的基本理论,一个关系模型能够从第一范式到第五范式进行无损分解,这个过程也可称为规范化。在数据仓库的模型设计中目前通常采用第三范式,它有着严格的数学定义。从其表达的含义来看,一个符合第三范式的关系必须具备如下三个条件 :

每一个属性值惟一,不具备多义性 ;
每一个非主属性必须彻底依赖于整个主键,而非主键的一部分 ;
每一个非主属性不能依赖于其余关系中的属性,由于这样的话,这种属性应该归到其余关系中去。
因为范式是基于整个关系型数据库的理论基础之上发展而来的,所以,本人在这里很少作介绍,有兴趣的读者能够经过阅读相应的材料来得到这方面的知识。

根据 Inmon 的观点,数据仓库模型得建设方法和业务系统的企业数据模型相似。在业务系统中,企业数据模型决定了数据的来源,而企业数据模型也分为两个层次,即主题域模型和逻辑模型。一样,主题域模型能够当作是业务模型的概念模型,而逻辑模型则是域模型在关系型数据库上的实例。

图 5. 范式建模法

clipboard.png

从业务数据模型转向数据仓库模型时,一样也须要有数据仓库的域模型,即概念模型,同时也存在域模型的逻辑模型。这里,业务模型中的数据模型和数据仓库的模型稍微有一些不一样。主要区别在于:

数据仓库的域模型应该包含企业数据模型的域模型之间的关系,以及各主题域定义。数据仓库的域模型的概念应该比业务系统的主题域模型范围更加广。
在数据仓库的逻辑模型须要从业务系统的数据模型中的逻辑模型中抽象实体,实体的属性,实体的子类,以及实体的关系等。
以笔者的观点来看,Inmon 的范式建模法的最大优势就是从关系型数据库的角度出发,结合了业务系统的数据模型,可以比较方便的实现数据仓库的建模。但其缺点也是明显的,因为建模方法限定在关系型数据库之上,在某些时候反而限制了整个数据仓库模型的灵活性,性能等,特别是考虑到数据仓库的底层数据向数据集市的数据进行汇总时,须要进行必定的变通才能知足相应的需求。所以,笔者建议读者们在实际的使用中,参考使用这一建模方式。

  1. 维度建模法

维度建模法,Kimball 最早提出这一律念。其最简单的描述就是,按照事实表,维表来构建数据仓库,数据集市。这种方法的最被人普遍知晓的名字就是星型模式(Star-schema)。

图 6. 维度建模法

clipboard.png

上图的这个架构中是典型的星型架构。星型模式之因此普遍被使用,在于针对各个维做了大量的预处理,如按照维进行预先的统计、分类、排序等。经过这些预处理,可以极大的提高数据仓库的处理能力。特别是针对 3NF 的建模方法,星型模式在性能上占据明显的优点。

雪花模型也是维度建模中的一种选择。雪花模型的维度表能够拥有其余维度表的,虽然这种模型相比星型模型更规范一些,可是因为这种模型不太容易理解,维护成本比较高,并且性能方面须要关联多层维表,性能也比星型模型要低。因此通常不是很经常使用。雪花模型以下图

clipboard.png

同时,维度建模法的另一个优势是,维度建模很是直观,牢牢围绕着业务模型,能够直观的反映出业务模型中的业务问题。不须要通过特别的抽象处理,便可以完成维度建模。这一点也是维度建模的优点。

可是,维度建模法的缺点也是很是明显的,因为在构建星型模式以前须要进行大量的数据预处理,所以会致使大量的数据处理工做。并且,当业务发生变化,须要从新进行维度的定义时,每每须要从新进行维度数据的预处理。而在这些与处理过程当中,每每会致使大量的数据冗余。

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

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

  1. 实体建模法

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

虽然实体法粗看起来好像有一些抽象,其实理解起来很容易。即咱们能够将任何一个业务过程划分红 3 个部分,实体,事件和说明,以下图所示:

图 7. 实体建模法

clipboard.png

上图表述的是一个抽象的含义,若是咱们描述一个简单的事实:“小明开车去学校上学”。以这个业务事实为例,咱们能够把“小明”,“学校”当作是一个实体,“上学”描述的是一个业务过程,咱们在这里能够抽象为一个具体“事件”,而“开车去”则能够当作是事件“上学”的一个说明。

从上面的举例咱们能够了解,咱们使用的抽象概括方法其实很简单,任何业务能够当作 3 个部分:

实体,主要指领域模型中特定的概念主体,指发生业务关系的对象。
事件,主要指概念主体之间完成一次业务流程的过程,特指特定的业务过程。
说明,主要是针对实体和事件的特殊说明。
因为实体建模法,可以很轻松的实现业务模型的划分,所以,在业务建模阶段和领域概念建模阶段,实体建模法有着普遍的应用。从笔者的经验来看,再没有现成的行业模型的状况下,咱们能够采用实体建模的方法,和客户一块儿理清整个业务的模型,进行领域概念模型的划分,抽象出具体的业务概念,结合客户的使用特色,彻底能够建立出一个符合本身须要的数据仓库模型来。

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

所以,笔者建议读者在建立本身的数据仓库模型的时候,能够参考使用上述的三种数据仓库得建模方法,在各个不一样阶段采用不一样的方法,从而可以保证整个数据仓库建模的质量。

4、 数据仓库建模样例

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

熟悉社保行业的读者能够知道,目前咱们国家的社保主要分为养老,失业,工伤,生育,医疗保险和劳动力市场这 6 大块主要业务领域。在这 6 大业务领域中,目前的情况养老和事业的系统已经基本完善,已经有一部分数据开始联网检测。而,对于工伤,生育,医疗和劳动力市场这一块业务,有些地方发展的比较成熟,而有些地方还不够成熟。

1.业务建模阶段

基于以上的背景介绍,咱们在业务建模阶段,就很容易来划分相应的业务。所以,在业务建模阶段,咱们基本上肯定咱们本次数据仓库建设的目标,建设的方法,以及长远规划等。以下图:

图 8. 业务建模阶段

clipboard.png

在这里,咱们将整个业务很清楚地划分红了几个大的业务主线,例如:养老,失业,工伤,生育,医疗,劳动力等着几个大的部分,而后咱们能够根据这些大的模块,在每一个业务主线内,考虑具体的业务主线内须要分析的业务主题。

所以,业务建模阶段实际上是一次和业务人员梳理业务的过程,在这个过程当中,不只能帮助咱们技术人员更好的理解业务,另外一方面,也可以发现业务流程中的一些不合理的环节,加以改善和改进。

同时,业务建模阶段的另外一个重要工做就是肯定咱们数据建模的范围,例如:在某些数据准备不够充分的业务模块内,咱们能够考虑先不建设相应的数据模型。等到条件充分红熟的状况下,咱们能够再来考虑数据建模的问题。

2.领域概念建模阶段

领域概念建模阶段是数据仓库数据建模的一个重要阶段,因为咱们在业务建模阶段已经彻底理清相应的业务范围和流程,所以,咱们在这个领域概念建模阶段的最主要的工做就是进行概念的抽象,整个领域概念建模的工做层次以下图所示:

图 9. 领域概念建模阶段

clipboard.png

从上图咱们能够清楚地看到,领域概念建模就是运用了实体建模法,从纷繁的业务表象背后经过实体建模法,抽象出实体,事件,说明等抽象的实体,从而找出业务表象后抽象实体间的相互的关联性,保证了咱们数据仓库数据按照数据模型所能达到的一致性和关联性。

从图上看,咱们能够把整个抽象过程分为四个层次,分别为:

抽象方法层,整个数据模型的核心方法,领域概念建模的实体的划分经过这种抽象方法来实现。
领域概念层,这是咱们整个数据模型的核心部分,由于不一样程度的抽象方法,决定了咱们领域概念的不一样。例如:在这里,咱们可使用“参与方”这个概念,同时,你也能够把他分红三个概念:“我的”,“公司”,和“经办机构”这三个概念。而咱们在构建本身的模型的时候,能够参考业务的情况以及咱们本身模型的须要,选择抽象程度高的概念或者是抽象程度低的概念。相对来讲,抽象程度高的概念,理解起来较为复杂,须要专业的建模专家才能理解,而抽象程度低的概念,较适合于通常业务人员的理解,使用起来比较方便。笔者在这里建议读者能够选用抽象概念较低的实体,以方便业务人员和技术人员之间的交流和沟通。
具体业务层,主要是解决具体的业务问题,从这张图咱们能够看出,具体的业务层,其实只是领域概念模型中实体之间的一些不一样组合而已。所以,完整的数据仓库的数据模型应该可以相应灵活多变的前端业务的需求,而其自己的模型架构具备很强的灵活性。这也是数据仓库模型所具有的功能之一。
业务主线层,这个层次主要划分大的业务领域,通常在业务建模阶段即已经完成这方面的划分。咱们通常经过这种大的业务主线来划分整个业务模型大的框架。
经过领域概念建模,数据仓库的模型已经被抽象成一个个的实体,模型的框架已经搭建完毕,下面的工做就是给这些框架注入有效的肌体。

3.逻辑建模阶段

经过领域概念建模以后,虽然模型的框架已经完成,可是还有不少细致的工做须要完成。通常在这个阶段,咱们还须要作很是多的工做,主要包括:

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

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

4.物理建模阶段

物理建模阶段是整个数据建模的最后一个过程,这个过程实际上是将前面的逻辑数据模型落地的一个过程。考虑到数据仓库平台的不一样,所以,数据模型得物理建模过程可能会稍微有一些不一样,在这个阶段咱们主要的工做是:

生成建立表的脚本。不一样的数据仓库平台可能生成不一样的脚本。
针对不一样的数据仓库平台,进行一些相应的优化工做,例如对于 DB2 数据仓库来讲,建立一些 MQT 表,来加速报表的生成等等。
针对数据集市的须要,按照维度建模的方法,生成一些事实表,维表等工做。
针对数据仓库的 ETL 车和元数据管理的须要,生成一些数据仓库维护的表,例如:日志表等。
通过物理建模阶段,整个数据仓库的模型已经所有完成,咱们能够按照本身的设计来针对当前的行业建立知足本身须要的数据模型来。

这里,笔者经过一个数据建模的样例,但愿可以给读者一个关于数据仓库建模的感性的认识。但愿读者在利用这些数据仓库得建模方法建立本身的数据模型的时候,能够根据业务实际的须要和本身对抽象能力的把握来建立适合本身的数据模型。

相关文章
相关标签/搜索