3.2 数据仓库设计方法论
数据仓库是商业智能分析和决策支持应用的最基本环境。正如软件开发中的系统分析和系统设计在整个开发周期中占举足轻重的地位一样,数据仓库的分析与设计在开发相关项目中同样也是十分重要的。
业务数据库和数据仓库由于两者功能的不同,设计方法必然会有很大的差异。但尽管如此,它们都是在DBMS中管理的,运用类比思维,设计数据仓库的时候,也可以从比较成熟的数据库设计方法论中找寻灵感。
实际上,在SQL Server 2005安装的两个示例数据库中,AdventureWorks就是属于操作型的数据库;而AdventureWorksDW则是分析型数据库,也就是数据仓库,其主要数据都源于AdventureWorks。微软在给出这个设计得十分精巧的数据仓库时,并没有说明此数据仓库是如何得来的,因此下面在研究数据仓库设计方法的时候,就主要以从AdventureWorks数据库到AdventureWorksDW数据仓库的过程为例来解析设计数据仓库过程中的复杂理论。
3.2.1 数据库设计与数据仓库设计
1.业务数据和分析数据使用方式的不同
普通数据库直接用于业务处理,因而需要严格约束表与表之间的关系,使数据在完整性等方面得到有效的保证。在设计这一类型的数据库的时,一般是先通过实体关系模型确定数据库中需要存储数据的表,再通过数据规范化方法(如第1、2、3范式等)改变这些表的结构,确定表的主外键,并以主外键为依据,在表之间建立起一对一或一对多的关系。图3-6即为AdventureWorks业务数据库中购买订单、买入商品运输方法和商品提供商等数据表之间的关系。从图中可以看出,对于购买订单报头这个表(PurchaseOrderHeader)而言,与供货商(Vendor)表、购买订单详情表(PurchaseOrderDetail)及运输方法表(ShipMethod)之间的关系是根据实际业务操作中应该有的关系来确定的,这样的数据库系统结构设计用于业务操作的信息化是很合适的。
图3-6 业务数据库中的表间关系示例
通过3.1节对事务处理和分析处理的比较可以得知,商务分析需要的数据库与业务数据库有很多地方不同,用于OLAP的数据应该是多维的。图3-7即为从购买地区、购买时间和产品名称等3个视角来分析购买订单时需要的一种数据立方。数据立方又称多维数据集,是使用分析数据的典型方式。
图3-7 3个视角分析购买订单时需要的数据立方
2.理解仓库中的立方体
在第2章,我们从整体上掌握了商业智能的整个应用过程,相信在此过程中已经有了对数据立方的感性认识。为了理解数据仓库设计的方法,下面从使用的角度理解数据立方。
正像在数学中用X、Y、Z坐标轴表示3个空间创建一个立方体一样,可以以不同的商业视角为维度建立一个商业智能分析用的立方体,这些维的属性是立方体的坐标轴。例如可以从客户的视角去观察商业数据,这时应该建立客户维,而客户维中有客户所在的城市这一属性,因而在立方体中会出现城市坐标轴。同样,时间维中的日期属性可以作为坐标轴,产品维中的产品名称可以作为坐标轴出。这个立方体上的1个点包含3个值:用户所在的城市、特定的产品和特定的日期,图3-7的立方体就是这样建立的。通过不同的坐标轴的灵活组合,可以构成各种各样的数据立方体。使用时间仓库时的数据立方体也不都是三维的,由于商务视角的多样性,大多数情况下数据立方是以三维以上的方式组成的。
数据立方中多个维度的值是商务需求中需要观察的目标,这个目标的值一般叫度量值。度量值来源于构成商务观察目标的事实表中。例如在图3-7的立方体中,事实表中有全部产品的销售度量,那么,可以用立方体上的某一个点度量某产品在某一时间和某一城市的销售情况。
由于商业数据在数据仓库中的这种多维特性,为分析数据提供了极大的方便。
如果保持立方体的某些坐标轴的值不变而改变另外某一个轴,便可以看到度量在不同维上的变化情况。在上面的例子中,如果保持产品的名称和日期为常量,沿客户城市坐标轴移动,便可以得到在所有客户城市某一天某一产品的全部销售值。有这种分析需求的一般是地区经理。同样,可以根据财务经理、产品经理及总经理对商务分析的不同需求来对数据立方体进行不同角度的解析,如图3-8所示。
图3-8 不同视角的数据立方分析
认识事物一般是从此事物在实践中的应用开始的。以上对业务数据和分析数据使用方式的区别及对数据立方的具体使用方法的解析是认识数据仓库的基础。正是由于其作用的不同,所以设计时数据库和数据仓库的目标也不同。
3.数据仓库的设计目标
根据前面对2种数据处理方式的对比,可以得到设计数据库和数据仓库的目标之间的差异,其结果如图3-9所示。
图3-9 数据仓库和数据库目标的差异
现在的问题是这种多维分析的需求既然不能用业务数据库的方式满足,那又应该怎样解决。
实际上,为了在商务分析时能以多个视角对某个业务事实进行操作,构建分析用的数据仓库时引入了维度概念来表示分析视角,事实概念来表示分析对象,事实的量度来表示对象的分析结果。而这些概念在数据分析阶段(本书的第5章将要论述)会得到直接使用或进行一定的改动。因此,这些对象在数据仓库中的设计如何,将直接影响后续的分析工作,而它们之间的关系则构成了整个数据仓库的架构。
3.2.2 数据仓库的架构方式及其比较
传统的关系数据库一般采用二维数表的形式来表示数据,一个维是行,另一个维是列,行和列的交叉处就是数据元素。关系数据的基础是关系数据库模型,通过标准的SQL语言来加以实现。
数据仓库是多维数据库,它扩展了关系数据库模型,以星形架构为主要结构方式的,并在它的基础上,扩展出理论雪花形架构和数据星座等方式,但不管是哪一种架构,维度表、事实表和事实表中的量度都是必不可少的组成要素。下面解析由这些要素构成的数据仓库的架构方式。
1.星形架构
星形模型是最常用的数据仓库设计结构的实现模式,它使数据仓库形成了一个集成系统,为最终用户提供报表服务,为用户提供分析服务对象。星形模式通过使用一个包含主题的事实表和多个包含事实的非正规化描述的维度表来支持各种决策查询。星形模型可以采用关系型数据库结构,模型的核心是事实表,围绕事实表的是维度表。通过事实表将各种不同的维度表连接起来,各个维度表都连接到中央事实表。维度表中的对象通过事实表与另一维度表中的对象相关联这样就能建立各个维度表对象之间的联系。每一个维度表通过一个主键与事实表进行连接,如图3-10所示。
图3-10 星形架构示意图
事实表主要包含了描述特定商业事件的数据,即某些特定商业事件的度量值。一般情况下,事实表中的数据不允许修改,新的数据只是简单地添加进事实表中,维度表主要包含了存储在事实表中数据的特征数据。每一个维度表利用维度关键字通过事实表中的外键约束于事实表中的某一行,实现与事实表的关联,这就要求事实表中的外键不能为空,这与一般数据库中外键允许为空是不同的。这种结构使用户能够很容易地从维度表中的数据分析开始,获得维度关键字,以便连接到中心的事实表,进行查询,这样就可以减少在事实表中扫描的数据量,以提高查询性能。
在AdventureWorksDW数据仓库中,若以网络销售数据为事实表,把与网络销售相关的多个商业角度(如产品、时间、顾客、销售区域和促销手段等)作为维度来衡量销售状况,则这些表在数据仓库中的构成如图3-11所示,可见这几个表在数据仓库中是以星形模型来架构的。
星形模式虽然是一个关系模型,但是它不是一个规范化的模型。在星形模式中,维度表被故意地非规范化了,这是星形模式与OLTP系统中关系模式的基本区别。
使用星形模式主要有两方面的原因:提高查询的效率。采用星形模式设计的数据仓库的优点是由于数据的组织已经过预处理,主要数据都在庞大的事实表中,所以只要扫描事实表就可以进行查询,而不必把多个庞大的表联接起来,查询访问效率较高,同时由于维表一般都很小,甚至可以放在高速缓存中,与事实表进行连接时其速度较快,便于用户理解;对于非计算机专业的用户而言,星形模式比较直观,通过分析星形模式,很容易组合出各种查询。
图3-11 AdventureWorksDW数据仓库中部分表构成的星形架构
2.雪花形架构
雪花模型是对星形模型的扩展,每一个维度都可以向外连接多个详细类别表。在这种模式中,维度表除了具有星形模型中维度表的功能外,还连接对事实表进行详细描述的详细类别表,详细类别表通过对事实表在有关维上的详细描述达到了缩小事实表和提高查询效率的目的,如图3-12所示。
错误!
图3-12 雪花模型架构示意图
雪花模型对星形模型的维度表进一步标准化,对星形模型中的维度表进行了规范化处理。雪花模型的维度表中存储了正规化的数据,这种结构通过把多个较小的标准化表(而不是星形模型中的大的非标准化表)联合在一起来改善查询性能。由于采取了标准化及维的低粒度,雪花模型提高了数据仓库应用的灵活性。
这些连接需要花费相当多的时间。一般来说,一个雪花形图表要比一个星形图表效率低。
在AdventureWorksDW数据仓库中,以图3-11的架构图为基础,可以扩展出雪花模型的架构,“DimProduct”表有一个详细类别表“DimProductSubcategory”,而“DimCustomer”表也有一个表示客户地区的表“DimGeograph”表作为其详细类别表,将它们加入数据仓库后,整个数据仓库就是雪花形架构,如图3-13所示。
图3-13 AdventureWorksDW数据仓库中部分表构成的雪花形架构
3.星形与雪花形架构的比较
在3.1节的讨论中可以得知,在数据仓库中表与表之间是不必满足3个范式的,也不必考虑数据冗余,相反,为了在分析型查询中获得较好的性能,数据仓库中的表还应该尽量集中同类型的数据,同时把有些常见的统计数据进行合并。按照这种思想,图3-13中的“DimProductSubcategory”表和“DimGeograph”表可以并入“DimProduct”表和“DimGeograph”表中使整个数据仓库呈现星形架构,但是微软在设计AdventureWorksDW数据仓库时并没有这样做,反而在“DimProductSubcategory”表和“DimProduct”表及“DimGeograph”表和“DimGeograph”表之间设计成满足一定范式要求的结构,下面将解释其原因。
标准的关系数据表不能满足数据的分析能力,所以对表进行非标准化处理以形成数据仓库中特有的星形架构方式,但这样一来,如果所有的分析维度都作为事实表的一个直接维度,数据的冗余是相当大的,比如将“DimProductSubcategory”表合并到“DimProduct”表中,的确能形成一个关于产品所有属性的维度,但要在一张表中表达产品类别属性和产品的属性,需要的存储空间是相当大的。由此可以看出,在星形架构的基础上扩展出雪花形架构,实质上是在分析查询的性能和数据仓库的存储容量2方面进行权衡的结果。表3-3具体比较了2种类型的架构差异。只有明确了这些差异,才能在设计数据仓库时选择最合适的架构方式。
表3-3 雪花形与星形层次结构的差异
4.星座模式
一个复杂的商业智能应用往往会在数据仓库中存放多个事实表,这时就会出现多个事实表共享某一个或多个维表的情况,这就是事实星座,也称为星系模式(galaxy schema)。
在AdventureWorksDW数据仓库中有多个事实,为了便于显示,取最重要的2个事实表“FactInternetSales”和“FactResellerSales”作为星座模式的例子。由于对网络销售和批发商销售的分析有很多观察视角都是相同的,因而这2个事实表共享的维度表较多,比如促销手段、时间和产品等。在数据库关系图中把它们的关系表现出来后,如图3-14所示。
图3-14 数据仓库的事实星座模式示例
5.数据集市
数据集市是在构建数据仓库的时候经常用到的一个词汇。如果说数据仓库是企业范围的,收集的是关于整个组织的主题,如顾客、商品、销售、资产和人员等方面的信息,那么数据集市则是包含企业范围数据的一个子集,例如只包含销售主题的信息,这样数据集市只对特定的用户是有用的,其范围限于选定的主题。
数据集市面向企业中的某个部门(或某个主题)是从数据仓库中划分出来的,这种划分可以是逻辑上的,也可以是物理上的。例如在AdventureWorksDW数据仓库中就是逻辑上划分的数据集市。
数据仓库中存放了企业的整体信息,而数据集市只存放了某个主题需要的信息,其目的是减少数据处理量,使信息的利用更加快捷和灵活。
数据仓库由于是企业范围的,能对多个相关的主题建模,所以在设计其数据构成时一般采用星系模式,AdventureWorksDW数据仓库就是这种情况。而数据集市是部门级的,具有选定的主题,可以采用星形或雪花模式。
图3-15是数据仓库、数据集市和数据立方之间的关系,通过此图可以更好地理解这3个概念。
错误!
图3-15 数据仓库、数据集市和数据立方之间的关系
3.2.3 宏观上的数据仓库设计
广义的数据仓库包括2部分,一是数据仓库数据库,用于存储数据仓库的数据;二是数据分析部分,用于对数据仓库数据库中的数据进行分析。广义的数据仓库设计应该包括数据仓库数据库的设计和数据仓库的应用设计2个方面,而数据仓库的应用与数据仓库的设计一脉相承,共同构成了数据仓库应用的整个生命周期,这个周期包括3个阶段:数据仓库规划分析阶段、数据仓库设计实施阶段及数据仓库的使用维护阶段。对这3个阶段的分别设计就是数据仓库宏观上的设计。
3个阶段是一个不断循环、完善和提高的过程。在一般情况下数据仓库系统不可能在一个循环过程中完成,而是经过多次循环开发,每次循环都会为系统增加新的功能,使数据仓库的应用得到新的提高。图3-16表达了这个循环的运动过程。
图3-16 宏观上数据仓库的开发阶段
这一个过程将软件工程思想应用在数据仓库的设计中,主要用在大型的数据仓库工程项目中,包含了构建完整应用的全过程,因此在本章不具体讨论此过程的使用细节,本书第10章“基于SSAS的商务智能分析”将会对这个过程中的有些重要步骤进行详细讲解。
3.2.4 微观上的数据仓库设计
微观上的数据仓库设计实际上指的是数据仓库数据库的设计,亦即宏观上设计仓库设计的第1个部分。在这个层面上主要任务是进行数据建模,确定数据仓库中数据的内容及其构成关系。
在数据库的世界里面,数据建模任务通常基于3种不同的视角:概念模型、逻辑模型和物理模型。其中概念模型用来表示真实世界的情况,逻辑模型是从真实世界到数据的物理存放细节的媒介,而物理模型即表示信息存放于硬件中的细节。
数据仓库数据库的设计也不例外。在数据仓库的3级数据模型中,概念模型表示现实世界的“业务信息”构成关系,用业务数据库设计中的“实体-关系”方法(E-R方法)来设计这一级的数据模型,但需要用分析主题代替传统E-R方法中的实体。在传统业务数据库设计中的逻辑模型一般采用范式规范的表及其关系,数据仓库设计中的逻辑模型也采用表来存储数据,因此也数据仓库中使用的也是关系模型,不过表与表之间不再通过3大范式的规范,而是以星形结构、雪花形结构和星座型结构等方式组成。物理模型则属于这些表的物理存储结构,比如表的索引设计等。
数据仓库的设计就是在概念模型、逻辑模型和物理模型的依次转换过程中实现的。作为数据仓库的灵魂——元数据模型则自始至终伴随着数据仓库的开发、实施与使用。数据粒度和聚合模型也在数据仓库的创建中发挥着指导的作用,指导着数据仓库的具体实现。图3-17表达了微观数据仓库设计中各种概念之间的关系。
图3-17 微观数据仓库设计中各种概念之间的关系
图3-18 数据仓库数据库设计的步骤
在图3-17的关系图中,元数据是在对企业商业智能需求分析和概念模型设计阶段就应该设计好并且一直贯穿于数据仓库应用全程的重要部分,而数据粒度和聚合的设计则是在逻辑模型的设计过程中完成的,物理模型则需要做一些存储优化方面的工作。具体而言,这3级数据模型设计的每1个阶段都有相应的详细设计步骤,图3-18即是对这些步骤的一个总结。
3.2.5 2种创建数据仓库的模式
创建数据仓库的方式,根据其出现的先后顺序,主要分为2种模式:自顶向下(Top-down),自底向上(Bottom-Up)。
1.自顶向下
这种模式首先把OLTP数据通过ETL汇集到数据仓库中,然后再把数据通过复制的方式推进各个数据集市中,其优点在于:
● 数据来源固定,可以确保数据的完整性。
● 数据格式与单位一致,可以确保跨越不同数据集市进行分析的正确性。
● 数据集市可以保证有共享的字段。因为都是从数据仓库中分离出来的。
2.自底向上
这种模式首先将OLTP数据通过ETL汇集到数据集市中,然后通过复制的方式提升到数据仓库中,其优点在于:
● 由于首先构建数据集市的工作相对简单,所以容易成功
● 这种模式也是实现快速数据传送的原型。
3.2.6 技术上需要关注的重点步骤
本章的主要任务就是完成数据仓库数据库的设计,在图3-18所给出的步骤是数据仓库设计的完整结构,在实践这一步骤的设计工作中,有5个重点步骤需要特别关注,它们是业务数据理解和需求分析、分析主题和元数据、事实及其量度和粒度、维度模式确定和数据仓库的物理存储方式。
这5个步骤贯穿了从分析到物理实现的全过程,而且一般的设计过程都是照此进行的,因此可以把它看做是设计数据仓库数据库的实践版本。这5个步骤及其与3级模型的关系可以用图3-19来表示。
图3-19 5步骤及其与3级模型的关系
从下面一节开始将分别阐述这5大步实现由业务事实到数据仓库的全过程。