关于范式的学习

范式

范式的基本概念

  1. 第一范式

    1
    数据表必须存在主键,并且字段满足原子性
  2. 第二范式

    1
    在第一范式的基础上,主键以外的其他字段必须 全部依赖 主键,不能 部分依赖
  3. 第三范式

    1
    在第二范式的基础上,主键以外的其他字段必须 直接依赖 主键,不能 传递依赖

举反例,认识范式

第一范式

学生编号 学生姓名 联系方式
1001 张三 1332662,12736@gmail.com
1002 王五 12332662,123456@qq.com
1003 李四 17832662,1der36@163.com
1001 赵六 145462662,35736@gmail.com

问题:

  • 不存在主键
  • 联系方式字段,不满足原子性

修改:

学生编号(pk) 学生姓名 电话 邮箱
1001 张三 1332662 12736@gmail.com
1002 王五 12332662 123456@qq.com
1003 李四 17832662 1der36@163.com
1004 赵六 145462662 35736@gmail.com

第二范式

学生编号 + 教师编号(pk) 学生姓名 教师姓名
1001 + 001 张三 王老师
1002 + 002 王五 张老师
1003 + 003 李四 赵老师
1001 + 002 张三 张老师

问题:

  • 学生姓名只部分依赖于主键

修改:
key:学生与教师满足多对多关系

学生表:

学生编号(pk) 学生姓名
1001 张三
1002 王五
1003 李四

教师表:

教师编号(pk) 教师姓名
001 王老师
002 张老师
003 赵老师

学生-教师 关系表:

|id(pk) |学生编号(fk)|教师编号(fk)|
| 1 |——-|——-|
| 2 | 1001 | 001 |
| 3 | 1002 | 002 |
| 4 | 1003 | 003 |
| 5 | 1001 | 002 |

第三范式

学生编号(pk) 学生姓名 班级编号 班级
1001 张三 001 一年一班
1002 王五 002 一年二班
1003 李四 003 一年三班

问题:

  • 班级依赖于班级编号,不直接依赖于学生编号

修改:
key:学生与班级满足多对一关系

班级表:

班级编号(pk) 班级
001 一年一班
002 一年二班
003 一年三班

学生表:

学生编号(pk) 学生姓名 班级编号(fk)
1001 张三 001
1002 王五 002
1003 李四 003

实际应用(设计数据库)

一对一:一张表
一对多:两张表,多做外键
多对多:三张表,两张数据表,一张关系表


关于范式的学习
http://lhystutest.top/2023/01/30/数据库/Mysql/关于范式的学习/
作者
lhy
发布于
2023年1月30日
许可协议