星形和雪花模型_数据仓库多维数据模型设计

73f8c68fd9e2a1b76ceded2e4304eb88.png

建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,那么,怎么建设我们的数据仓库模型就是我们需要解决的一个问题。这里我们将要详细介绍如何创建适合自己的数据模型。

b46002448b23b2eb731db0a8b10924aa.png2e7e24e1615606d2dbc3205ff8ae9e5b.png数据仓库建模方法3b7029293f84ef5b7866e68db7a101e6.png

大千世界,表面看五彩缤纷,实质上,万物都遵循其自有的法则。

数据仓库的建模方法同样也有很多种,每一种建模方法其实代表了哲学上的一个观点,代表了一种归纳,概括世界的一种方法。

目前业界较为流行的数据仓库的建模方法非常多,这里主要介绍范式建模法,维度建模法,实体建模法等几种方法,每种方法其实从本质上讲就是从不同的角度看我们业务中的问题,不管从技术层面还是业务层面,其实代表的是哲学上的一种世界观。

我们下面给大家详细介绍一下这些建模方法。

范式建模法

范式建模法(Third Normal Form,3NF)其实是我们在构建数据模型常用的一个方法,该方法的主要由 Inmon 所提倡,主要解决关系型数据库得数据存储,利用的一种技术层面上的方法。 

目前,我们在关系型数据库中的建模方法,大部分采用的是三范式建模法。 

范式是数据库逻辑模型设计的基本理论,一个关系模型可以从第一范式到第五范式进行无损分解,这个过程也可称为规范化。 

在数据仓库的模型设计中目前一般采用第三范式,它有着严格的数学定义。从其表达的含义来看,一个符合第三范式的关系必须具有以下三个条件 : 

每个属性值唯一,不具有多义性 ; 

每个非主属性必须完全依赖于整个主键,而非主键的一部分 ; 

每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中去。 

由于范式是基于整个关系型数据库的理论基础之上发展而来的,因此,本人在这里不多做介绍,有兴趣的读者可以通过阅读相应的材料来获得这方面的知识。 

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

从业务数据模型转向数据仓库模型时,同样也需要有数据仓库的域模型,即概念模型,同时也存在域模型的逻辑模型。 

这里,业务模型中的数据模型和数据仓库的模型稍微有一些不同。主要区别在于: 

数据仓库的域模型应该包含企业数据模型的域模型之间的关系,以及各主题域定义。 

数据仓库的域模型的概念应该比业务系统的主题域模型范围更加广。 

在数据仓库的逻辑模型需要从业务系统的数据模型中的逻辑模型中抽象实体,实体的属性,实体的子类,以及实体的关系等。 

以笔者的观点来看,Inmon 的范式建模法的最大优点就是从关系型数据库的角度出发,结合了业务系统的数据模型,能够比较方便的实现数据仓库的建模。 

但其缺点也是明显的,由于建模方法限定在关系型数据库之上,在某些时候反而限制了整个数据仓库模型的灵活性,性能等,特别是考虑到数据仓库的底层数据向数据集市的数据进行汇总时,需要进行一定的变通才能满足相应的需求。

维度建模法

维度建模法,Kimball 最先提出这一概念。其最简单的描述就是,按照事实表,维表来构建数据仓库,数据集市。

事实表是用来记录具体事件的,包含了每个事件的具体要素,以及具体发生的事情;维表则是对事实表中事件的要素的描述信息。

比如一个事件会包含时间、地点、人物、事件,事实表记录了整个事件的信息,但对时间、地点和人物等要素只记录了一些关键标记,比如事件的主角叫“Michael”,那么Michael到底“长什么样”,就需要到相应的维表里面去查询“Michael”的具体描述信息了。

基于事实表和维表就可以构建出多种多维模型,包括星形模型、雪花模型和星座模型。

维度建模法最被人广泛知晓的名字就是星型模式(Star-schema)。

58eef9b179221a0b163da54fbf3af395.png

上图的这个架构中是典型的星型架构。星型模式之所以广泛被使用,在于针对各个维作了大量的预处理,如按照维进行预先的统计、分类、排序等。 

通过这些预处理,能够极大的提升数据仓库的处理能力。 

特别是针对 3NF 的建模方法,星型模式在性能上占据明显的优势。 

同时,维度建模法的另外一个优点是,维度建模非常直观,紧紧围绕着业务模型,可以直观的反映出业务模型中的业务问题。 

不需要经过特别的抽象处理,即可以完成维度建模。这一点也是维度建模的优势。 

但是,维度建模法的缺点也是非常明显的,由于在构建星型模式之前需要进行大量的数据预处理,因此会导致大量的数据处理工作。 

而且,当业务发生变化,需要重新进行维度的定义时,往往需要重新进行维度数据的预处理。 

而在这些与处理过程中,往往会导致大量的数据冗余。 

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

因此以笔者的观点看,维度建模的领域主要适用与数据集市层,它的最大的作用其实是为了解决数据仓库建模中的性能问题。 

维度建模很难能够提供一个完整地描述真实业务实体之间的复杂关系的抽象方法。

实体建模法

实体建模法并不是数据仓库建模中常见的一个方法,它来源于哲学的一个流派。 

从哲学的意义上说,客观世界应该是可以细分的,客观世界应该可以分成由一个个实体,以及实体与实体之间的关系组成。 

那么我们在数据仓库的建模过程中完全可以引入这个抽象的方法,将整个业务也可以划分成一个个的实体,而每个实体之间的关系,以及针对这些关系的说明就是我们数据建模需要做的工作。 

虽然实体法粗看起来好像有一些抽象,其实理解起来很容易。 

即我们可以将任何一个业务过程划分成 3 个部分,实体,事件和说明。 

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

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

实体,主要指领域模型中特定的概念主体,指发生业务关系的对象。 

事件,主要指概念主体之间完成一次业务流程的过程,特指特定的业务过程。 

说明,主要是针对实体和事件的特殊说明。 

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

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

因此,笔者建议读者在创建自己的数据仓库模型的时候,可以参考使用上述的三种数据仓库得建模方法,在各个不同阶段采用不同的方法,从而能够保证整个数据仓库建模的质量。

b46002448b23b2eb731db0a8b10924aa.png802c52c1a02a7c1209827eeecc654fe2.png维度建模法数据模型的区别3b7029293f84ef5b7866e68db7a101e6.png

多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式、雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别。

星型模式(star schema)

星型模式的核心是一个大的中心表(事实表),一组小的附属表(维表)。星型模式示例如下所示:

d12b37833e93cb17ca72c0ec974eb067.png

b6c3f5473774933b3085f2990c61eedf.png

可以看出,星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:

a. 维表只和事实表关联,维表之间没有关联;

b. 每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;

c. 以事实表为核心,维表围绕核心呈星形分布;

雪花模式(snowflake schema)

雪花模式是星型模式的扩展,其中某些维表被规范化,进一步分解到附加表(维表)中。雪花模式示例如下图所示:

632b1b65947b82e3f86a5ac63e3a1eb0.png

f2f44029836da27a714f39b343b88004.png

从图中我们可以看到地址表被进一步细分出了城市(city)维。supplier_type表被进一步细分出来supplier维。

星形模式中的维表相对雪花模式来说要大,而且不满足规范化设计。雪花模型相当于将星形模式的大维表拆分成小维表,满足了规范化设计。然而这种模式在实际应用中很少见,因为这样做会导致开发难度增大,而数据冗余问题在数据仓库里并不严重。

事实星座模式(Fact Constellation)

数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式。本模式示例如下图所示:

680514e185599dfbcac139359077bc55.png

090150501bfd7b9ce3202738faf4a67f.png

如上图所示,事实星座模式包含两个事实表:sales和shipping,二者共享维表。

事实星座模式是数据仓库最常使用的数据模式,尤其是企业级数据仓库(EDW)。

前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。

这也是数据仓库区别于数据集市的一个典型的特征,从根本上而言,数据仓库数据模型的模式更多是为了避免冗余和数据复用,套用现成的模式,是设计数据仓库最合理的选择。

三种模式对比

归纳一下,星形模式/雪花模式/星座模式的关系如下图所示:

f8e14c2a7d9a18b7afec4e6f1b6f3154.png

b46002448b23b2eb731db0a8b10924aa.png8310cf925d192d6a3317e8e3087ffafb.png实例3b7029293f84ef5b7866e68db7a101e6.png

在进行维度建模前,首先要了解用户需求。而笔者在数据库系列的第一篇就讲过,ER建模是当前收集和可视化需求的最佳技术。因此假定和某零售公司进行多次需求PK后,得到以下ER图: 

1b9e71588aa9ee35fd4faba9b6a25aa8.png

随后可利用建模工具将ER图直接映射到关系图: 

45e379c3a210c224a1201b11219499e3.png

需求搜集完毕后,便可进行维度建模了。本例采用星形模型维度建模。但不论采取何种模式,维度建模的关键在于明确下面四个问题:

1.哪些维度对主题分析有用?

本例中,根据产品(PRODUCT)、顾客(CUSTOMER)、商店(STORE)、日期(DATE)对销售额进行分析是非常有帮助的;

2.如何使用现有数据生成维表?

a. 维度PRODUCT可由关系PRODUCT,关系VENDOR,关系CATEGORY连接得到;

b. 维度CUSTOMER和关系CUSTOMER相同;

c. 维度STORE可由关系STROE和关系REGION连接得到;

d. 维度CALENDAR由关系SALESTRANSACTION中的TDate列分离得到;

3.用什么指标来”度量”主题?

本例的主题是销售,而销量和销售额这两个指标最能直观反映销售情况;

4.如何使用现有数据生成事实表?

销量和销售额信息可以由关系SALESTRANSACTION和关系SOLDVIA,关系PRODUCT连接得到;

明确这四个问题后,便能轻松完成维度建模:

a389be424cba8c0de1e47afca139edc9.png

细心的读者会发现三个问题:1. 维表不满足规范化设计(不满足3NF);2. 事实表也不满足规范化设计(1NF都不满足); 3. 维度建模中各维度的主码由***ID变成***Key;

对于前两个问题,由于当前建模环境是数据仓库,而没有更新操作,所以不需要严格做规范化设计来消除冗余避免更新异常。

因此虽然可以以雪花模型进行维度建模,如下所示:

038c3514ef89c68a0d962a0fe9556512.png

但这样会加大查询人员负担:每次查询都涉及到太多表了。因此在实际应用中,雪花模型仅是一种理论上的模型。星座模型则出现在”维度建模数据仓库”中,本文后面将会讲到。

对于第三个问题,***Key这样的字段被称为代理码(surrogate key),它是一个通过自动分配整数生成的主码,没有任何其他意义。使用它主要是为了能够处理”缓慢变化的维度”。

b46002448b23b2eb731db0a8b10924aa.png1fb4a7d8d059eb8efa20731bb5c34c35.png经典星座模型3b7029293f84ef5b7866e68db7a101e6.png

前文已经讲过,有多个事实表的维度模型被称为星座模型。星座模型主要有以下两大作用:共享维度和设置细节/聚集事实表。下面分别对这两种情况进行分析:

共享维度

以前文提到的零售公司为例,假如该公司质量监管部门希望用分析销售主题同样的方法分析劣质产品,那么此时不需要重新维度建模,只需往模型里加入一个新的劣质产品事实表。之后新的数据仓库维度建模结果如下:

872c1810dc692ae18665baec15433b12.png

细节/聚集事实表

细节事实表(detailed fact tables)中每条记录表示单一事实,而聚集事实表(aggregated fact tables)中每条记录则聚合了多条事实。从表的字段上看,细节事实表通常有设置TID属性,而聚集事实表则无。

两种事实表各有优缺点,细节事实表查询灵活但是响应速度相对慢,而聚集事实表虽然提高了查询速度,但使查询功能受到一定限制。一个常见的做法是使用星座模型同时设置两种事实表(可含多个聚集事实表)。这种设计方法中,聚集事实表使用和细节事实表细节事实表的维度。如下维度建模方法采用星座模型综合了细节事实表和两种聚集事实表:

d2f696b4f294ca7b2beff44a5497b385.png

439f8cf576c0a207654fba88caf54b38.gifEND

来源:CSDN(侵删)

作者:张小凡vip(侵删)

编辑:实施晓记

原文:https://blog.csdn.net/zzq900503/article/details/78492505

▼更多精彩推荐,请关注我们▼

134f0b5aebc43504d703bb04bf3c5207.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化流程设计器 Activiti Designer

插件安装地址:http://activiti.org/designer/update 插件使用手册:http://www.activiti.org/userguide/index.html#activitiDesigner Intellij IDEA版本: http://plugins.jetbrains.com/plugin/7429?pridea (或在插件中心搜索actiBPM)

FreeWheel是一家怎样的公司?| 人物志

戳蓝字“CSDN云计算”关注我们哦!人物志:观云、盘点、对话英雄。以云计算风云人物为核心,聚焦个人成长、技术创新、产业发展,还原真实与鲜活!作者 | 孙浩峰在知乎上有一个帖子,题目就是“FreeWheel是一家怎…

2017双11技术揭秘—千亿级流量来袭,如何用硬件加速技术为CPU减负?

摘要: 在刚过去的2017年双11零点流量高峰的考验下,主站接入层Tengine Gzip硬件加速机器运行平稳、同等条件下相比于未开启QAT加速的机器性能提升21%左右。 作者:王发康(毅松) 主站接入层是阿里2015年全站HTTPS项目诞生…

STS安装 activiti-designer-5.18.0插件

方式一:在有网络的情况下,安装流程设计器步骤如下: 1、点击eclipse上方工具栏的Help,选择Install New Software 2、弹出如下窗口,然后填写插件名称和安装地址 Name: Activiti BPMN 2.0 designer Location: http://a…

2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制

摘要: Tair是阿里巴巴集团自研的弹性缓存/存储平台,在内部有着大量的部署和使用。Tair的核心组件是一个高性能、可扩展、高可靠的NoSQL存储系统。目前支持MDB、LDB、RDB等存储引擎。本文基于Tair的存储和访问原理,对缓存的读写热点问题进行讨…

5G精华问答 | 5G与LTE有什么关系?

1G时我们用手机打电话,2G时我们能互发短信、看文字信息,3G时上网看图片,而4G时我们看视频和直播,从1G到4G,不仅信号越来越好,安全性越来越高,上网也越来越快了。1Q:5G关键指标A&…

2017双11技术揭秘—双十一海量数据下EagleEye的使命和挑战

摘要: EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用&…

2017双11技术揭秘—TDDL/DRDS 的类 KV 查询优化实践

摘要: 性能优化是企业级应用永恒的话题,关系型数据库查询优化更是如此。在前台核心业务场景中,类 KeyValue 查询(以下简称类 KV 查询)是非常常见的,并且在应用总 SQL 流量占比很高,如果仅在SQL层面进行进一步优化会非常困难&#…

揭密|淘宝服务端千万级高并发架构的演进之路

戳蓝字“CSDN云计算”关注我们哦!作者 | huashiou来源 | https://segmentfault.com/a/11900000186261631、概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术&#…

VMware安装Centos7超详细过程(图文)

软件版本链接VM14后续补充CentOS7http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso参考链接https://blog.csdn.net/babyxue/article/details/80970526文章目录一、虚拟机准备① 打开VMwear选择新建虚拟机② 典型安装与自定义安装③ 虚拟机兼容…

2017双11技术揭秘—X-DB支撑双11进入分布式数据库时代

摘要: 今年双11是X-DB的第一次大考,本次双11X-DB服务于天猫/淘宝核心交易系统、核心物流系统、核心IM系统,经受了零点业务32.5万笔/秒峰值的性能考验,同时X-DB支撑起了新一代单元化架构. 作者:章颖强(江疑)…

ifix虚拟服务器,ifix的客户端和服务器

ifix的客户端和服务器 内容精选换一换介绍使用同一VPC内弹性云服务器ECS上的C# Redis客户端连接Redis实例的方法。更多的客户端的使用方法请参考Redis客户端。已成功申请Redis实例,且状态为“运行中”。已创建弹性云服务器,创建弹性云服务器的方法&#…

一张图看懂阿里云网络产品【四】NAT网关

摘要: NAT网关(NAT Gateway)是一款企业级的VPC公网网关,提供SNAT和DNAT功能,支持多IP,支持共享带宽,具备Tbps级别的集群转发能力和Region级别的高可用性。

Failure to find com.oracle:ojdbc6:jar:11.2.0.1.0

报错原因:oracle的ojdbc.jar是收费的,maven的中央仓库是没有的,需要下载到本地,然后打包进maven仓库 1.下载ojdbc6-11.2.0.1.0.jar包 http://central.maven.org/maven2/com/jslsolucoes/ojdbc6/11.2.0.1.0/ojdbc6-11.2.0.1.0.ja…

c++文件流读取一行_「软帝学院」Java挑战者专栏:IO流详解2

软帝学院笔记Day18IO流(字符流FileReader)1.字符流是什么字符流是可以直接读写字符的IO流字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.2.FileReaderFileReader类的read()方法可以按照字符大小读取FileReader fr new FileR…

“AI捡垃圾”上热搜了!46城垃圾分类将投200亿,你怎么看?

自动上海开始推行垃圾分类,上海人民就成为了广大网友的快乐源泉。据说有一位“机智”的程序员由于加班太忙,把垃圾寄快递到昆山去扔。快递员表示:天才操作!并拒绝了他,然后花半小时教他垃圾分类。在哈哈哈的同时&#…

解决“Failure to find com.oracle:ojdbc6:jar”,手动安装ojdbc的jar包到maven私仓

在使用mvn进行编译的时候,遇到如下错误: Could not resolve dependencies for project com.bairong.platform:auth:jar:3.0: Failure to find com.oracle:ojdbc6:jar:11.2.0.1.0 in http://maven.aliyun.com /nexus/content/groups/public/ was cached …

2017双11技术揭秘—阿里数据库进入全网秒级实时监控时代

摘要: 2017双11再次创下了32.5万笔/秒交易创建的纪录,在这个数字后面,更是每秒多达几千万次的数据库写入,如何大规模进行自动化操作、保证数据库的稳定性、快速发现问题是一个巨大的难题, 这也是数据库管控平台要完成的…

混合云发展之路:前景广阔,巨头混战

戳蓝字“CSDN云计算”关注我们哦!知名云管理服务商RightScale(目前已经被Flexera公司收购) 每年都会对企业使用云的情况进行调查,以此分析全球企业云的采用情况。RightScale 发布的2019年全球云计算市场调查显示,在众多云平台中,混…