MySQL-3
MySQL的设计
多表操作
三大范式
数据库的设计
数据库的设计就是在设计表,一个好的数据库设计可以大大简化代码的完成
多表之间的关系
- 一对一:一个人和一个身份证
- 一对多:员工和部门
- 多对多:学生和课程
一对一
例如:人和身份证
可以在任意的一方添加外键指向另一方的主键,且得让外键唯一
一般情况下一对一可以合成为一张表
1 | graph LR |
或者
1 | graph LR |
一对多
例如:员工和部门
员工(多)添加一列外键指向部门(一)的主键
实现方式:
多的一方的外键指向少的一方的主键
1 | graph LR |
多对多
例如:学生和课程
中间表:最少得有两个字段
- 学生的主键
- 课程的主键
多对多要借助一个中间表
1 | graph LR |
数据库设计的范式
范式:设计数据库时,需要遵循的一些规范
百度百科:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,
这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小
要遵循更高层的范式必须遵循低层的全部范式
目前关系数据库有六种范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)
第一范式
数据库表的每一列都是不可分割的原子数据项
缺点:
- 数据冗余严重
- 数据添加存在问题,添加新内容时不合法
- 数据删除也存在问题
第二范式
在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
解决了数据冗余的问题
基本概念
函数依赖
A–>B,通过A属性的值,可以确定唯一B属性的值,则称B依赖于A(A是B的充分条件)
例如:学号–>姓名,(学号,课程名)–>分数
完全函数依赖
A–>B,A是B的唯一充分条件
部分函数依赖
传递函数依赖
A–>B,B–>A,通过A可以确定唯一的C
码
如果一张表中一个属性或属性组,被其他所有属性完全依赖,则称这个属性为这个表的码
第三范式
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
解决了所有的问题