PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2023-12-23 15:58:42  修改时间:2024-11-20 08:30:58  分类:MySQL/Redis  编辑
  • 假设有 A,B 两个实体,首先判断一个 A 对应几个 B,再判断一个 B 对应几个 A:
  • 如果两边都是 1:1,那么 A 与 B 就是一对一的关系;
  • 如果两边只有一个 1:n,那么 A 与 B 就是一对多的关系;
  • 如果两边都是 1:n,那么 A 与 B 就是多对多的关系;

  1. Course:课程表
  2. Location: 位置表
  3. Teacher:老师表
  4. Trainee:学员表
  5. TrainingEvent:排课表
  6. Registration:报名表

 


一对多关系

举例:部门和员工的对应关系 :

  1. 正过来看,("1")一个部门里面可以有多个员工("n")
  2. 反过来看一一对应:一个员工只能对应一个部门

由于满足上面两条,所以一对多关系成立,部门是 1 员工是 n

策略: 在“多”的一方添加外键,指向“一”的一方的主键。

如何在数据库中操作?请看:在MySQL中添加外键的几种方式(一对多关系)

多对多关系

举例:教师与学生

  1. 正过来看,("1")一个老师能教多名学生("n")
  2. 反过来看,("1")一个学生有多个老师("n")

策略:增加一张表,专门维护两张表之间的关系。

增加中间表之后:教师表("1") 与 中间表("n") 形成了一对多的关系,而且中间表维护了唯一对应的找到表中数据的关系。

同样的 学生表("1") 与 中间表("n") 也是一对多的关系。一对多的关系可以匹配到关联表中的数据。

如何在数据库中操作?请看:在MySQL中建立多对多关系的映射(建立中间表)

总结

总结, 判断一对多还是多对一,主要取决于反过来看(也就是第二条)

  1. 正反均是一对一 :一对一
  2. 正是一对多,反是一对一 :一对多
  3. 正是一对一,反是一对多 :多对一(这一条和一对多本质上是一类,只不过是反过来理解罢了)
  4. 正反均是一对多 :多对多

 

  • 一对多:“多”方所属“一”方
  • 多对多:拥有多个对方

 

参考:

  1. 数据库中“一对一”、“一对多”、“多对多”的判断方法
  2. 【数据库】快速判断一对多,多对多关系,并建立数据库实体之间的映射
  3. 如何判断一对一、一对多和多对多的关系