目录
数据库设计三范式
1. 什么是数据库设计范式?
2. 数据库设计范式共有3个
3. 第一范式
以上学生表满足第一范式吗?
以下学生表则满足第一范式
4. 第二范式
4.1 分析以上的表是否满足第一范式?
4.2 怎么修改则满足第一范式呢?
4.3 经过修改之后,以上的表满足了第一范式。但是满足第二范式吗?
4.4 产生部分依赖有什么缺点?
4.5 为了让以上的表满足第二范式,你需要这样设计
编辑4.6 多对多关系怎么设计?
5. 第三范式
5.1 分析以上表是否满足第一范式?
5.2 分析以上表是否满足第二范式?
5.3 分析以上表是否满足第三范式?
5.4 那么应该怎么设计一对多呢?
数据库设计三范式
1. 什么是数据库设计范式?
2. 数据库设计范式共有3个
- 第一范式:要求任何一张表必须要有主键,每一个字段原子性不可再分。
- 第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
- 第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。
声明:三范式是面试官经常问的,所以一定要熟记在心!
设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,造成空间的浪费。
3. 第一范式
- 最核心,最重要的范式,所有表的设计都需要满足。
- 任何一张表必须要有主键,并且每一个字段都是原子性不可再分。

以上学生表满足第一范式吗?
- 不满足,第一:没有主键。第二:联系方式可以分为邮箱地址和电话
以下学生表则满足第一范式

4. 第二范式
- 建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

这张表描述了学生和老师的关系:1个学生可能有多个老师,1个老师有多个学生。这是非常典型的:多对多关系!
4.1 分析以上的表是否满足第一范式?
4.2 怎么修改则满足第一范式呢?

学生编号和教师编号这两个字段联合做主键,复合主键(PK: 学生编号+教师编号)
4.3 经过修改之后,以上的表满足了第一范式。但是满足第二范式吗?
- 不满足,“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。
4.4 产生部分依赖有什么缺点?
- 数据冗余了。空间浪费了。“张三”重复了,“王老师”重复了。
4.5 为了让以上的表满足第二范式,你需要这样设计
学生表

教师表

学生教师关系表

4.6 多对多关系怎么设计?
- 背口诀:多对多,三张表,关系表两个外键!!!!!!!
5. 第三范式
- 第三范式建立在第二范式的基础之上,要求所有非主键字段必须直接依赖主键,不要产生传递依赖。

- 以上表的设计是描述班级和学生的关系。很显然是1对多关系! 一个班级中有多个学生。
5.1 分析以上表是否满足第一范式?
5.2 分析以上表是否满足第二范式?
- 满足第二范式,因为主键不是复合主键,没有产生部分依赖。主键是单一主键。
5.3 分析以上表是否满足第三范式?
- 第三范式要求:不要产生传递依赖!
- 一年一班依赖01,01依赖1001,产生了传递依赖。
- 不符合第三范式的要求。产生了数据的冗余。
5.4 那么应该怎么设计一对多呢?
班级表:一

学生表:多

- 背口诀:一对多,两张表,多的表加外键!!!!!!!!!!!!