数据库三大范式是什么?用几张表说明一下
时间: 2023-12-17 12:02:08 浏览: 29
数据库三大范式是指:
1NF(第一范式):所有属性都是原子性的,不可再分。
2NF(第二范式):满足1NF的基础上,非主键属性完全依赖于主键。
3NF(第三范式):满足2NF的基础上,非主键属性之间不存在传递依赖。
下面以一个学生选课系统为例,说明如何用三张表满足三大范式:
学生表(Student):
| 学号 | 姓名 | 性别 | 生日 |
| ---- | ---- | ---- | --------- |
| 001 | 张三 | 男 | 1999/1/1 |
| 002 | 李四 | 女 | 2000/2/2 |
| 003 | 王五 | 男 | 2001/3/3 |
课程表(Course):
| 课程编号 | 课程名称 | 学分 |
| -------- | -------- | ---- |
| 001 | 语文 | 3 |
| 002 | 数学 | 4 |
| 003 | 英语 | 2 |
选课表(Selection):
| 学号 | 课程编号 | 成绩 |
| ---- | -------- | ---- |
| 001 | 001 | 80 |
| 001 | 002 | 90 |
| 002 | 003 | 85 |
| 003 | 001 | 70 |
以上三张表已经满足了第一范式,每个属性都是原子性的。但是存在冗余数据,例如选课表中的学号和课程编号在多个记录中重复出现。为了满足第二范式,可以将选课表拆分为两张表:
学生选课表(StudentSelection):
| 学号 | 课程编号 | 成绩 |
| ---- | -------- | ---- |
| 001 | 001 | 80 |
| 001 | 002 | 90 |
| 002 | 003 | 85 |
| 003 | 001 | 70 |
课程表(Course):
| 课程编号 | 课程名称 | 学分 |
| -------- | -------- | ---- |
| 001 | 语文 | 3 |
| 002 | 数学 | 4 |
| 003 | 英语 | 2 |
现在每个表都有一个主键,学生选课表的主键是学号和课程编号的组合,课程表的主键是课程编号。非主键属性都完全依赖于主键。但是还存在传递依赖,例如学生表中的姓名属性和性别属性都依赖于学号,而不是直接依赖于主键。为了满足第三范式,可以将学生表也拆分为两张表:
学生表(Student):
| 学号 | 生日 |
| ---- | --------- |
| 001 | 1999/1/1 |
| 002 | 2000/2/2 |
| 003 | 2001/3/3 |
学生信息表(StudentInfo):
| 学号 | 姓名 | 性别 |
| ---- | ---- | ---- |
| 001 | 张三 | 男 |
| 002 | 李四 | 女 |
| 003 | 王五 | 男 |
现在每个表都满足了第三范式,不存在冗余数据和传递依赖。