《Hadoop构建数据仓库实践》 作者:王雪迎

解读:小小兜

三种常见的数据仓库模型:

关系数据模型、多维数据模型和Data Vault模型

2.1 关系数据模型

关系数据模型的两组术语:“关系、属性、元组”和“表、列、行”。在这里它们的含义是相同的,只不过前者是关系数据模型的正式术语,而后者是常用的数据库术语。

在选择主键时,我们可以参考以下原则:

1.主键要尽可能地小。

2.主键值不应该被改变。主键会被其他表所引用。

3.主键通常使用数字类型。

4.主键应该是没有业务含义的,它不应包含实际的业务信息。无意义的数字列不需要修改,因此是主键的理想选择

5.虽然主键允许由多列组成,但应该使用尽可能少的列,最好是单列

主键所在的表被称为父表,外键所在的表被称为子表。

1.空值(NULL)

空值与数字零或者空字符串不同,零和空字符串是值,但空值代表没有值。因此,空值应该与其他值区别对待。空值具有特殊性,当它参与逻辑运算时,结果取决于真值表。

SQL语言又可分为DDL、DML、DCL、TCL四类:

DDL是Data Definition Language的缩写,意为数据定义语言,用于定义数据库结构和模式。典型的DDL有create、alter、drop、truncate、comment、rename等。

DML是Data Manipulation Language的缩写,意为数据操纵语言,用于检索、管理和维护数据库对象。典型的DML有select、insert、update、delete、merge、call、explain、lock等。

DCL是Data Control Language的缩写,意为数据控制语言,用于授予和回收数据库对象上的权限。典型的DCL有grant和revoke。

TCL是Transaction Control Language的缩写,意为事务控制语言,用于管理DML对数据的改变。它允许一组DML语句联合成一个逻辑事务。典型的TCL有commit、rollback、savepoint、set transaction等。

规范化是通过应用范式规则实现的。最常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。

(1)第一范式(1NF)

表中的列只能含有原子性(不可再分)的值。

(2)第二范式(2NF)

第二范式要同时满足下面两个条件:
● 满足第一范式。
● 没有部分依赖。
第三范式要同时满足下面两个条件:
● 满足第二范式。
● 没有传递依赖。
如果一个表有良好的主外键设计,就应该是满足3NF的表。规范化带来的好处是通过减少数据冗余提高更新数据的效率,同时保证数据完整性。
然而,我们在实际应用中也要防止过度规范化的问题。规范化程度越高,划分的表就越多,在查询数据时越有可能使用表连接操作。
还有一点需要注意的是,不要为了遵循严格的规范化规则而修改业务需求。

基本可以分为Inmon和Kimball两大阵营,Inmon阵营是应用关系数据模型构建数据仓库的支持者
关系数据模型构建数据仓库的优势:
1.非冗余性
2.稳定性
3.一致性
4.灵活性
关系数据模型的缺点:
它需要额外建立数据集市的存储区,并增加相应的数据装载过程。另外,对数据仓库的使用强烈依赖于对SQL语言的掌握程度。

2.2 维度数据模型
事实维度是两个维度模型中的核心概念。
事实表示对业务数据的度量,而维度是观察数据的角度。

维度模型通常以一种被称为星型模式的方式构建。所谓星型模式,就是以一个事实表为中心,周围环绕着多个维度表。
还有一种模式叫做雪花模式,是对维度做进一步规范化后形成的。
2.2.3 维度数据模型的特点
(1)易理解。在维度模型中,信息按业务种类或维度进行分组,这会提高信息的可读性,也方便了对于数据含义的解释。
(2)高性能。维度模型更倾向于非规范化,因为这样可以优化查询的性能
(3)可扩展。由于维度模型允许数据冗余,因此当向一个维度表或事实表中添加字段时,不会像关系模型那样产生巨大的影响,带来的结果就是更容易容纳不可预料的新增数据

2.2.4 星型模式
星型模式由事实表和维度表组成,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。
1.事实表
● 事务事实表。记录特定事件的事实,如销售。
● 快照事实表。记录给定时间点的事实,如月底账户余额。
● 累积事实表。记录给定时间点的聚合事实,如当月的总的销售金额。
2.维度表
● 时间维度表。描述星型模式中记录的事件所发生的时间,具有所需的最低级别的时间粒度。数据仓库是随时间变化的数据集合,需要记录数据的历史,因此每个数据仓库都需要一个时间维度表。
● 地理维度表。描述位置信息的数据,如国家、省份、城市、区县、邮编等。
● 产品维度表。描述产品及其属性。
● 人员维度表。描述人员相关的信息,如销售人员、市场人员、开发人员等。
● 范围维度表。描述分段数据的信息,如高级、中级、低级等。
3.优点
● 简化查询。
● 简化业务报表逻辑。
● 获得查询性能。
● 快速聚合。
● 便于向立方体提供数据。
4.缺点
星型模式的主要缺点是不能保证数据完整性。一次性地插入或更新操作可能会造成数据异常,而这种情况在规范化模型中是可以避免的。
星型模式的另一个缺点是对于分析需求来说不够灵活。
2.2.5 雪花模式
雪花模式是一种多维模型中表的逻辑布局,其实体关系图有类似于雪花的形状,因此得名。与星型模式相同,雪花模式也是由事实表和维度表所组成。
当所有的维度表完成规范化后,就形成了以事实表为中心的雪花型结构,即雪花模式。将维度表进行规范化的具体做法是,把低基数的属性从维度表中移除并形成单独的表。基数指的是一个字段中不同值的个数,如主键列具有唯一值,所以有最高的基数,而像性别这样的列基数就很低。
2.优点
● 一些OLAP多维数据库建模工具专为雪花模型进行了优化。
● 规范化的维度属性节省存储空间。
3.缺点
雪花模型的主要缺点是维度属性规范化增加了查询的连接操作和复杂度。
和具有更高规范化级别的事务型模式相比,雪花模式并不确保数据完整性。向雪花模式的表中装载数据时,一定要有严格的控制和管理,避免数据的异常插入或更新。

2.3 Data Vault模型
Data Vault是一种数据仓库建模方法,用来存储来自多个操作型系统的完整的历史数据。
Data Vault方法需要跟踪所有数据的来源,因此其中每个数据行都要包含数据来源和装载时间属性,用以审计和跟踪数据值所对应的源系统。
它是一种综合了第三范式(3NF)和星型模型优点的建模方法
例如:
业务规则应该在数据的下游实现,就是说Data Vault只按照业务数据的原样保存数据,不做任何解释、过滤、清洗、转换。
即使从不同数据源来的数据是自相矛盾的(例如同一个客户有不同的地址), Data Vault模型不会遵照任何业务的规则,如“以系统A的地址为准”。
Data Vault模型会保存两个不同版本的数据,对数据的解释将推迟到整个架构的后一个阶段(数据集市)。

2.3.2 Data Vault模型的组成部分
Data Vault模型有中心表(Hub)、链接表(Link)、附属表(Satellite)三个主要组成部分。
中心表记录业务主键,链接表记录业务关系,附属表记录业务描述。

一个设计良好的Data Vault模型应该具有以下特点:
● 所有数据都基于时间来存储,即使数据是低质量的,也不能在ETL过程中处理掉。
● 依赖越少越好。
● 和源系统越独立越好。
● 设计上适合变化。
◆ 源系统中数据的变化。
◆ 在不改变模型的情况下可扩展。
● ETL作业可以重复执行。
● 数据完全可追踪。

4.设计必要的PIT表
Point—In—Time表是由附属表派生而来的。如果一个中心表或者链接表设计有多个附属表的话,而为了访问数据方便,就有用到PIT表的可能。
PIT表的主键也是由其所归属的中心表提取而来,该中心表有几个附属表,PIT表就至少应该有几个字段来存放各个附属表的变化对比时间。

建立Data Vault模型时应该参照如下的原则:
(1)关于中心表的原则
● 中心表的主键不能够直接“伸入”到其他中心表里面。就是说,不存在父子关系的中心表。各个中心表之间的关系是平等的,这也正是Data Vault模型灵活性与扩展性之所在。
● 中心表之间必须通过链接表相关联,通过链接表可以连接两个以上的中心表。
● 必须至少有两个中心表才能产生一个有意义的链接表。
● 中心表的主键总是“伸出去”的(到链接表或者附属表)。
(2)关于链接表的原则
● 链接表可以跟其他链接表相连。
● 中心表和链接表都可以使用代理键。
● 业务主键从来不会改变,就是说中心表的主键也即链接表的外键不会改变。
(3)关于附属表的原则
● 附属表必须是连接到中心表或者链接表上才会有确定的含义。
● 附属表总是包含装载时间和失效时间,从而包含历史数据,并且没有重复的数据。
● 由于数据信息的类型或者变化频率快慢的差别,描述信息的数据可能会被分隔到多个附属表中去。

2.4 数据集市
2.4.1 数据集市的概念
数据集市是数据仓库的一种简单形式,通常由组织内的业务部门自己建立和控制。一个数据集市面向单一主题域,如销售、财务、市场等。
数据集市的数据源可以是操作型系统(独立数据集市),也可以是企业级数据仓库(从属数据集市)。

2.4.2 数据集市与数据仓库的区别

2.4.3 数据集市设计
数据集市主要用于部门级别的分析型应用,数据大都是经过了汇总和聚合操作,粒度级别较高。
数据集市一般采用维度模型设计方法,数据结构使用星型模式或雪花模式。

2.5 数据仓库实施步骤
1.定义范围
2.确定需求
3.逻辑设计
4.物理设计
5.装载数据
6.访问数据

第2章 数据仓库设计基础相关推荐

  1. hadoop构建数据仓库实践 数据仓库简介和数据仓库设计基础章节 读书笔记

    1.数据仓库简介 1.0演变 1.1什么是数据仓库 本质:数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型. 要解决的问题:多重数据复制带来的高成本问题(在没有数据仓库的时代,需要大量的 ...

  2. 《网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通》—— 第1章 网页设计基础知识...

    本节书摘来异步社区<网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通>一书中的第1章,作者: 何新起 , 任 ...

  3. 第一章.程序设计基础

    第一章.程序设计基础 1.简述冯-诺依曼计算机的组成与工作原理. (1)硬件系统:运算器.控制器.存储器.输入设备和输出设备五大部件组成. (2)采用存储程序的方式工作:用户事先编好程序,然后将程序( ...

  4. 第3章 面向对象设计基础

    第3章  面向对象设计基础 第二章介绍了C#的基本语法,以及使用方法.C#同Java.C++一样是面向对象的编程语言,同时C#更强化了面向对象的概念.本章将介绍面向对象的基础知识并介绍使用C#编写面向 ...

  5. 商务智能-第四章 数据仓库设计

    Lecture4-Design of Data Warehouse 1. 数据仓库设计的由来 在事务型数据处理中需要作数据库设计,而在分析型数据处理中则需作数据仓库设计,这两者在原理上是一致的 因此, ...

  6. 计算机三级数据库技术 第14章 数据仓库与数据挖掘

    14.1 决策支持系统的发展 14.1.1 决策支持系统及其演化 ➢般将数据分为: 分析型数据 操作型数据:由企业的基本业务系统产生的数据,用于联机处理环境(OLTP). ➢决策支持系统(DSS):综 ...

  7. 第五章 数据仓库实例

    可以查看大数据测试系列 说明 这章比较重要,是对hadoop和hive以及建模的一次实践 阅读本章,请把hadoop和hive环境搭建好,可以参考如下文章: 第三章 大数据之Hadoop搭建 第四章 ...

  8. 02数据仓库设计基础

    首先介绍关系数据模型.多维数据模型和 Data Vault 模型这三种常见的数据仓库模型和与之相关的设计方法,然后讨论数据集市的设计问题,最后说明一个数据仓库项目的实施步骤.规划实施过程是整个数据仓库 ...

  9. 数据仓库工具箱维度建模权威指南-第一章 数据仓库、商业智能及维度建模初步

    数据仓库和商业智能(Data Warehousing and Business Intelligence, DW/BI),DW/BI 系统的数据结构与标识必须符合业务用户的思维过程和词汇 信息两个目的 ...

最新文章

  1. 2019 浙江大学 计算机 科目,2019考研大纲:浙江大学2019年《计算机学科专业基础综合》(单考)(科目代码907)...
  2. 卧槽!成就了Java,开发框架排第一,你还是不够了解它!
  3. gitzip没有作用以及github如何下载单个文件或目录
  4. linux6.5安装打印机,如何在CentOS 6.5下安装Win7下的共享打印机服务
  5. webpack4.x开发环境配置
  6. java web分层的思想
  7. CISSP考试通过,现在开始接受各种恭喜。[10-50]
  8. Linux最小体积mysql安装_Linux下安装MySQL以及一些小坑
  9. Linux Shell常用技巧(二)
  10. python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程
  11. MATLAB使用教程(4)——悄悄滴上手项目
  12. Android开发笔记(九十五)自定义Drawable
  13. 漫画 | 产品经理的八大罪状(上)
  14. 百万级MySQL的数据量,该如何快速的完成数据迁移?
  15. 学生选课管理系统(上)
  16. 数据科学 | Pandas新手入门
  17. Delphi 调用打印指令ZPL--USB
  18. linux 系统编程--标准IO-缓存
  19. 2019支付宝小程序技术专场招募
  20. Mercury老版路由器WDS

热门文章

  1. 3914. 【NOIP2014模拟11.2B组】人品问题
  2. 那些年,我们在Android机型适配上遇到的坑丨之Camera拍照时快门咔嚓声
  3. 关于mysql的一些小知识
  4. PyG基于GCN实现图分类任务
  5. Android播放flash
  6. Python网络爬虫识记
  7. ​为什么大多数代码都很糟糕,能做些什么来改进代码吗?
  8. 分类特征的选择和提取
  9. svn 安装目录 没有 svn.exe(修复不需要重装)
  10. Redis实现微博好友功能微服务(关注,取关,共同关注)