白话数据建模

在当前的大数据热潮中,大数据已经渗入各行各业了,遍地开花,包括传统的制造业,工业也纷纷重视起来。但是所谓兵无常势,水无常形,不同行业,有不同行业的特点,业务不同,因此知道如何根据行业,根据业务去进行数据建模,数据分析,建立起适用的数据仓库很重要。

上篇我们讲了数据仓库的构建过程,其中的底层数据库到中间层 OLAP 的过程就是我们的数据建模了。

一、数据建模的流程

数据建模是建立数据仓库的核心,也叫数据集市。数据建模划分为几个阶段,如下图所示 640?wx_fmt=gif 

640?wx_fmt=png

简单说明下这几个阶段

业务建模对业务进行划分,理清业务之间的关系

领域概念建模抽象关键业务概念,通过抽象业务之间的关联,形成完整的领域概念模型,得出业务,事件,说明。

逻辑模型业务概念实体化,事件概念实体化,说明概念实体化

物理模型针对物理平台,比如数据库,做出技术调整,生成脚本。

二、数据建模方法

上面我们对数据建模过程,那么数据建模有哪些方法呢。有我们做web时熟悉的ER建模,关系建模(适合  OLTP ), 还有专门针对数据仓库的维度建模,本文重点介绍维度建模。

维度建模, Kimball 最先提出这个概念,按照事实表,维度表来构建数据仓库。

可能有读者大人会有疑问,事实表是什么,维度表又是什么。

维度表(dimension):比如销售业务中,产品维,地域维,时间维,每个维度都有一张维度表,维度表里放着这些维度的属性。比如产品维度表,里面有产品id,产品类别,产品名,产品价格等等属性。

事实表(fact table)根据某些维度聚合形成的表。根据上面的例子,它的事实表中字段有 product_id(来自产品表),time (来自时间表),SalesAmount (销售额),count(销售数量)。

由上面的事实表,这边引出两个概念,维以及度量。

的具体描述信息记录在维表,事实表中的维属性只是一个关联到维表的键,并不记录具体信息。

度量记录事件的相应数值,比如这里的产品的销售数量、销售额。

三、维度建模模型

维度建模本身也有现成的建模方法论给我们的 。维度建模有三种模型可以供我们选择,分别是星形模型,雪花模型,星座模型。

星形模型由一个大的中心表(事实表),它包含大批数据并且不冗余以及一组小的附属表,每维一个。

直接上图,清晰明了

640?wx_fmt=png


雪花模型星形模型的变种,其中某些维表被规范化,因而把数据进一步分解到附加的表中。 640?wx_fmt=gif

640?wx_fmt=png

星座模型复杂的应用可能需要多个事实表共享维表。这种模式可以看作是星形模型的汇集。 

640?wx_fmt=png

对比

在性能上,星座模型是相对简洁也比较友好,因为它结构简单,跟雪花模型相比,少了一层 join 。跟星座模型相比,逻辑较简单。但如果遇到维度比较复杂的业务,雪花模型会是比较好的选择。不过很多时候事实表不止一个,一个维表可能被多个事实表关联。

四、OLAP

通过上面一系列的逻辑建模后,我们就要开始 OLAP 操作了。首先我们先要了解数据立方体的概念。 我们从一堆数据里提取信息,之后形成数据报告。这些数据报告通常使用二维表示,是行和列组成的二维表格。但在实际业务中,数据立方体可以理解为就是维度扩展后的二维表格。下面是一个三维立方体:

640?wx_fmt=png

OLAP 以查询为主,也就是数据库的‘SELECT’,可以结合关系数据库的查询进行多表关联,同时也可以直接使用 COUNT,AVG,SUM 等聚合函数。

OLAP 的操作包括

上卷(Roll-up)通过沿一个维的概念分层向上攀升或者通过维归约在数据立方体上进行聚集。例如从城市层往省层聚集。

钻取(Drill-down)是上卷的逆操作。比如从国家层往省层聚集

切片(Slice)在给定的立方体的一个维上操作。比如选择time=‘2010第一季度’,对time维选择销量数据。

切块(Dice)跟切片相似,当时在两个或多个维上进行选择。比如  location =‘江苏’ and time = ‘2010第一季度’ or ‘2010第二季度’。

旋转(Pivot)维的位置互换。比如在二维立方体上, 将行和列的位置互换。

640?wx_fmt=png


具体操作,举个例子

比如上卷

查询语法:
SELECT...GROUP BY ROLLUP(GROUPING_

COLUMN_REFERENCE_LIST);

例: 选择时间,地点,产品,总和(收入)AS销售收益 GROUP BY ROLLUP(时间,地点,产品);

具体操作:


 

# 上卷

SELECT Locates.地区, Products.分类, SUM(数量)

FROM Sales, Products, Locates
WHERE Sales.Locate_key = Locates.Locate_key    

AND Sales.Product_key = Products.Product_key

GROUP BY Locates.地区, Products.分类

上卷跟下钻只要对 GROUP BY 进行操作

切片

查询语法:

使用<WHERE子句> <GROUP BY>选择某些属性的条件,并对某些属性进行聚合。

例: 选择产品,销售额(收入),其中PRODUCTS ='OPV'GROUP BY产品;

具体操作:


 

# 切片

SELECT Locates.地区, Products.分类, SUM(数量)

FROM Sales, Dates, Products, Locates
WHERE Dates.季度 = 2    

AND Sales.Date_key = Dates.Date_key    

AND Sales.Locate_key = Locates.Locate_key    

AND Sales.Product_key = Products.Product_key

GROUP BY Locates.地区, Products.分类

切片跟切块主要对 WHERE 语句进行操作

五、小结

这篇文章,主要对数据仓库中的数据建模进行叙述。数据建模在整个数据仓库建立过程中起着至关重要的一步,甚至说是灵魂。是大数据工作的充分必要条件。数据建模其实是 从具体到抽象再到具体 的过程。底层思维就是一个客体与关系的哲学思想,从繁杂的现实业务整理提取出实体,并弄清楚以及实体与实体之间的关系。

两篇文章下来,可能大家都能感受到,建设数据仓库是很庞大,繁琐的一个过程,涉及业务,数据建模,技术架构等等。我们需要学习的还有很多。本文旨在对数据仓库中的数据建模有一个系统性的了解,具体需要我们在实践中慢慢学习。属于‘法’的层面吧。

推荐阅读:

数据仓库那些事儿

大数据存储的进化史 从RAID到Hadoop Hdfs

大数据时代的结构化存储--HBase

640?wx_fmt=png

喜欢就点一下【好看】呗~

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值