第一范式
现在有这样一张表,表头为:员工编号、姓名、部门、季度、考核结果,其中部门并不是单一列,由部门名称和部门领导组成。
| 员工编号 | 员工姓名 | 部 门 | 季度 | 考核结果 |
|---------|----------|部门名称|部门领导|-----------|-------|
此时这张表不满足第一范式。
第一范式:每一个列必须是单一列,而不能是复合列。
用第一范式来设计这张表:
| 员工编号 | 员工姓名 | 部门名称 | 部门领导 | 季度 | 考核结果 |
|---------|--------|---------|---------|------|---------|
| 001 | 张三 | 开发部 | 王经理 | Q1 | 优秀 |
| 001 | 张三 | 开发部 | 王经理 | Q2 | 良好 |
| 001 | 张三 | 开发部 | 王经理 | Q3 | 一般 |
| 001 | 张三 | 开发部 | 王经理 | Q4 | 优秀 |
| 002 | 李四 | 销售部 | 赵经理 | Q1 | 良好 |
| 002 | 李四 | 销售部 | 赵经理 | Q2 | 优秀 |
| 002 | 李四 | 销售部 | 赵经理 | Q3 | 优秀 |
| 002 | 李四 | 销售部 | 赵经理 | Q4 | 良好 |
| 003 | 王五 | 人事部 | 刘经理 | Q1 | 一般 |
| 003 | 王五 | 人事部 | 刘经理 | Q2 | 良好 |
| 003 | 王五 | 人事部 | 刘经理 | Q3 | 一般 |
| 003 | 王五 | 人事部 | 刘经理 | Q4 | 优秀 |
第一范式存在什么问题呢?插入异常、删除异常、修改异常。
- 插入异常。假如现在要插入一个员工,编号=004,姓名=麻六,部门名称=开发部,部门领导=王经理,但是这个员工还没有考核信息,而插入记录必须要有值,这时考核信息为空,就无法插入员工基本信息了。
- 删除异常。假如误添加某个员工Q4的考核,现在要删除,那么整条记录就要被删除,使得基本信息也要被删除,从而造成删除异常,即不应该删除的信息也被删除了。
- 修改异常。如果人事部的领导换了,那么就需要修改多条记录。
第二范式的作用就可以修改这些问题。
第二范式
先看定义:
第二范式:在第一范式的基础上,非主键列完全依赖于主键列,而不能是依赖于主键的一部分。
如果用第二范式来检查上面的表设计,会发现这张表明显不符合特征:姓名、部门名称、部门领导、职位名称都是依赖于编号,而季度和考核结果不依赖于编号,所以这个表设计是不合理的,解决方法就是将符合第二范式的列合并进一个表中,将不符合的列重新建表。
员工基本信息表
员工编号 | 员工姓名 | 部门名称 | 部门领导 |
| ---- | ---- | ---- | ---- |
| 001 | 张三 | 开发部 | 王经理 |
| 002 | 李四 | 销售部 | 赵经理 |
| 003 | 王五 | 人事部 | 刘经理 |
季度考核表
员工编号 | 季度 | 考核结果 |
| ---- | -- | ---- |
| 001 | Q1 | 优秀 |
| 001 | Q2 | 良好 |
| 001 | Q3 | 一般 |
| 001 | Q4 | 优秀 |
| 002 | Q1 | 良好 |
| 002 | Q2 | 优秀 |
| 002 | Q3 | 优秀 |
| 002 | Q4 | 良好 |
| 003 | Q1 | 一般 |
| 003 | Q2 | 良好 |
| 003 | Q3 | 一般 |
| 003 | Q4 | 优秀 |
可以看到季度考核表现在没什么问题,但是员工基本信息表出现问题了,部门名称和部门领导都要依靠编号才能出现,如果员工被删除,部门名称和部门领导就没了,这样设计还是有缺陷,这时候就需要第三范式了。
第三范式
同样先看定义:
第三范式:在第二范式的基础上,非主键列完全依赖于主键列,不依赖于其他非主键。
拆分结果如下:
员工表
| 员工编号 | 员工姓名 | 部门编号 |
| ---- | ---- | ---- |
| 001 | 张三 | 1 |
| 002 | 李四 | 2 |
| 003 | 王五 | 3 |
部门表
| 部门编号 | 部门名称 | 部门领导 |
| ---- | ---- | ---- |
| 1 | 开发部 | 王经理 |
| 2 | 销售部 | 赵经理 |
| 3 | 人事部 | 刘经理 |
季度考核表
| 员工编号 | 季度 | 考核结果 |
| ---- | -- | ---- |
| 001 | Q1 | 优秀 |
| 001 | Q2 | 良好 |
| 001 | Q3 | 一般 |
| 001 | Q4 | 优秀 |
| 002 | Q1 | 良好 |
| 002 | Q2 | 优秀 |
| 002 | Q3 | 优秀 |
| 002 | Q4 | 良好 |
| 003 | Q1 | 一般 |
| 003 | Q2 | 良好 |
| 003 | Q3 | 一般 |
| 003 | Q4 | 优秀