MySQL-3

引言:

MySQL的设计

多表操作

三大范式


数据库的设计

数据库的设计就是在设计表,一个好的数据库设计可以大大简化代码的完成

多表之间的关系

  1. 一对一:一个人和一个身份证
  2. 一对多:员工和部门
  3. 多对多:学生和课程

一对一

例如:人和身份证

可以在任意的一方添加外键指向另一方的主键,且得让外键唯一

一般情况下一对一可以合成为一张表

1
2
graph LR
人-->身份证

或者

1
2
graph LR
身份证-->人

一对多

例如:员工和部门

员工(多)添加一列外键指向部门(一)的主键

实现方式:

多的一方的外键指向少的一方的主键

1
2
3
4
5
graph LR
员工A-->部门A
员工B-->部门A
员工C-->部门A
员工D-->部门A

多对多

例如:学生和课程

中间表:最少得有两个字段

  • 学生的主键
  • 课程的主键

多对多要借助一个中间表

1
2
3
4
5
graph LR
学生A-->中间表
数学-->中间表
中间表-->学生A
中间表-->数学

数据库设计的范式

范式:设计数据库时,需要遵循的一些规范

百度百科:

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,

这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小

要遵循更高层的范式必须遵循低层的全部范式

目前关系数据库有六种范式:

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)

第一范式

数据库表的每一列都是不可分割的原子数据项

缺点:

  1. 数据冗余严重
  2. 数据添加存在问题,添加新内容时不合法
  3. 数据删除也存在问题

第二范式

在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)

解决了数据冗余的问题

基本概念

  • 函数依赖

    A–>B,通过A属性的值,可以确定唯一B属性的值,则称B依赖于A(A是B的充分条件)

    例如:学号–>姓名,(学号,课程名)–>分数

  • 完全函数依赖

    A–>B,A是B的唯一充分条件

  • 部分函数依赖

  • 传递函数依赖

    A–>B,B–>A,通过A可以确定唯一的C

  • 如果一张表中一个属性或属性组,被其他所有属性完全依赖,则称这个属性为这个表的码

第三范式

在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

解决了所有的问题