数仓表之三范式

没有规范化,数据的更新处理将变得困难,异常的插入、修改、删除数据的操作会频繁发生。

我们先来看一下三范式的定义

 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

我们看一下这张表

数仓表之三范式_第1张图片

上面这张表是不规范的,看到张三的电话一栏中有2个电话号码

就违背了第一范式的原子性(不可分割性),现在将其更改为下图模式

数仓表之三范式_第2张图片

改完后满足了第一范式,但是此表还是有其他问题的

例如,员工表的一个候选键是 {id , mobile , deptNo} ,而 deptName 依赖于 {deptNo} ,同样 name 仅依赖于 {id} ,因此不是 2NF 的。为了满足第二范式的条件,需要将这个表
拆分成 employee 、 dept 、 employee_dept 、 employee_mobile 四个表

数仓表之三范式_第3张图片

数仓表之三范式_第4张图片

数仓表之三范式_第5张图片

数仓表之三范式_第6张图片

如上图的四个表  ID个人信息表、部门编号与部门名称表、ID部门编号表、ID手机号码表

其中  ID个人信息表还是存在问题 其中邮编依赖于城市 城市再依赖于ID  所以其不符合第三范式的规则,所以要讲这张表再拆分为二,将邮编和城市的表单独拆分出来

数仓表之三范式_第7张图片

数仓表之三范式_第8张图片

 

这样所有的表都符合了三范式,

我们将一张表成功的拆分成了5张表。

你可能感兴趣的:(数仓表之三范式)