数据库范式第一第二第三范式的区别例题解析
网站编辑2023-05-18 12:04:34920
第一范式是指关系模式中的所有属性都是原子性的,即不可再分解的。

考虑一个学生信息表,其中包含学生的姓名、性别、年龄和所在班级。其中,班级信息是以逗号分隔的字符串,如“1班,2班,3班”。
| 姓名 | 性别 | 年龄 | 班级 |
| ---- | ---- | ---- | ---------- |
| 张三 | 男 | 18 | 1班,2班,3班 |
| 李四 | 女 | 19 | 2班,3班 |
这个表不符合第一范式,因为班级信息不是原子性的,需要进行拆分。
将班级信息拆分成单独的表,每个班级对应一条记录,如下所示:
| 学生姓名 | 性别 | 年龄 | 班级编号 |
| -------- | ---- | ---- | -------- |
| 张三 | 男 | 18 | 1 |
| 张三 | 男 | 18 | 2 |
| 张三 | 男 | 18 | 3 |
| 李四 | 女 | 19 | 2 |
| 李四 | 女 | 19 | 3 |
这个表符合第一范式,每个属性都是原子性的。
第二范式是指关系模式中的非主属性必须完全依赖于主键,而不能只依赖于主键的一部分。
考虑一个订单表,其中包含订单号、商品编号、商品名称、商品单价和商品数量。
| 订单号 | 商品编号 | 商品名称 | 商品单价 | 商品数量 |
| ------ | -------- | -------- | -------- | -------- |
| 001 | 001 | 苹果 | 5 | 2 |
| 001 | 002 | 香蕉 | 3 | 3 |
| 002 | 001 | 苹果 | 5 | 4 |
这个表不符合第二范式,因为商品名称和商品单价只依赖于商品编号,而不是订单号。
将商品信息拆分成单独的表,每个商品对应一条记录,如下所示:
| 商品编号 | 商品名称 | 商品单价 |
| -------- | -------- | -------- |
| 001 | 苹果 | 5 |
| 002 | 香蕉 | 3 |
然后将订单表中的商品编号替换为商品信息表中的商品编号,如下所示:
| 订单号 | 商品编号 | 商品数量 |
| ------ | -------- | -------- |
| 001 | 001 | 2 |
| 001 | 002 | 3 |
| 002 | 001 | 4 |
这个表符合第二范式,商品名称和商品单价完全依赖于商品编号。
第三范式是指关系模式中的非主属性不依赖于其他非主属性。
考虑一个学生选课表,其中包含学生编号、课程编号、课程名称和教师姓名。
| 学生编号 | 课程编号 | 课程名称 | 教师姓名 |
| -------- | -------- | -------- | -------- |
| 001 | 001 | 数学 | 张三 |
| 001 | 002 | 英语 | 李四 |
| 002 | 001 | 数学 | 张三 |
这个表不符合第三范式,因为教师姓名依赖于课程编号,而不是学生编号。
将教师信息拆分成单独的表,每个教师对应一条记录,如下所示:
| 教师姓名 | 课程编号 |
| -------- | -------- |
| 张三 | 001 |
| 李四 | 002 |
然后将选课表中的教师姓名替换为教师信息表中的教师姓名,如下所示:
| 学生编号 | 课程编号 | 课程名称 | 教师姓名 |
| -------- | -------- | -------- | -------- |
| 001 | 001 | 数学 | 张三 |
| 001 | 002 | 英语 | 李四 |
| 002 | 001 | 数学 | 张三 |
这个表符合第三范式,教师姓名不依赖于其他非主属性。







