数仓建模的意义
- 建模是用于数仓设计的,一般从0-1搭建数仓时是需要会建模理论的;
公司数仓搭建好后,一般都是直接接需求;
- 将数据有序的组织和存储起来:需要遵循方法和理论,方法和理论就是模型;
- 建模:是一个动作和过程,需要遵循模型;
- 模型有ER模型和维度模型,这两个就是不同的建模方法;
- 口径:对指标的定义
1. 数据建模的两种方式
-
关系建模
和维度建模
是两种数据仓库的建模技术。 - 关系建模由Bill Inmon所倡导,维度建模由 Ralph Kimball 所倡导。
2. 关系建模理论(ER模型)
- 数据仓库之父
Bill Inmon
提出的建模方法是从全企业的高度,用实体关系(Entity Relationship,ER)模型来描述企业业务,并用规范化的方式表示出来,在范式理论上符合3NF。 - 实体和关系模型: 对象和对象之间的关系;1-1 ;1-n; n-n
- 数据库规范化: 规范化目的是减少数据冗余,增强数据一致性;
当某列只有一个的时候,因此只能修改他自己;如果有冗余,比如有两份,可能只改了一份,就导致数据不一致!
2.1 范式理论
1)定义
数据建模必须遵循一定的规则,在关系建模中,这种规则就是范式
2)作用
采用范式,可以降低数据的冗余性
为什么要降低数据冗余性?
(1)十几年前,磁盘很贵,为了减少磁盘存储。
(2)以前没有分布式系统,都是单机,只能增加磁盘,磁盘个数也是有限的
(3)一次修改,需要修改多个表,很难保证数据一致性
3)范式的缺点
范式的缺点是获取数据时,需要通过Join拼接出最后的数据
4)分类
关系型数据库的范式一共有六种,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。遵循的范式级别越高,数据冗余性就越低。
2.2 范式理论前要–函数依赖
1.2.1 完全函数依赖 z = f(x,y)
定义: 由字段x和字段y可以获取唯一的字段z,但是由单独的x或者单独的y获取不了z,此时称为z完全依赖于(x,y),即z =f(x,y)
1.2.2 部分函数依赖
定义: Z完全依赖于x,y,n,此时称Z部分函数依赖于x,y
也就是说Z只需要(x,y,n)的一部分,此时称之为Z部分依赖于(x,y,n)
1.2.3 传递函数依赖
y=f(x),z=g(y) ,因此可以由x获取z,此时称之为Z传递函数依赖于x
2.3 三范式
2.3.1 第一范式-属性不可切割
- 第一范式没有用到上面的函数依赖;
- 第一范式:属性不可切割!
2.3.2 第二范式
- 第二范式: 不能存在非主键字段部分函数依赖于主键字段;
如何拆表? 假设 Zn = f(x,y)
- 找主键:上表中,主键是(学号,课程);
- 保留表中完全依赖于主键的字段以及主键 即: Z = f(x,y) ,Z和x、y保留在一张表中
- 将部分依赖的 Z = f(x) , Z和x 保留在一张表中
2.3.3 第三范式
第三范式: 非主键字段不能传递函数依赖于主键字段;
也就是说:y=f(x),z=g(y) x,y,z都在同一张表了,不满足第三范式;
拆表方法:
x和y放一张表,y和z放一张表
2.4 关系建模的特点
- 关系模型严格遵循第三范式(3NF),数据冗余程度低,数据的一致性容易得到保证。
- 由于数据分布于众多的表中,查询会相对复杂,在大数据的场景下,查询效率相对较低。
3. ER模型示例