MySQL——表的四种关联关系

表与表之间的数据记录有关联关系(relationship)。

四种表的关联关系:一对一关联、一对多(或多对一)关联、多对多关联、自我关联

一对一关联(one-to-one)

一张表的一条记录一定只能与另外一张表的一条记录进行对应,反正亦然。

应用场景:为了提高查询效率,把原有的一张表查分成两张表,如:

  • 学生表:学号,姓名、手机号、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人

把学生表拆成两个表,两个表是一一对应的关系(通过唯一的字段(学号)来连接两张表):

  • 基础信息表:学号、姓名、手机号、班级、系别

  • 档案信息表:学号、身份证号码、家庭住址、籍贯、紧急联系人

一对一两种建表原则:

  • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键加上唯一约束unique。
  • 外键是主键:主表的主键和从表的主键形成主外健关系,就是让一张表的主键同时作为另一张表的主键,同时这一张表的主键不能自增。

一对多关联(one-to-many)或多对一关联

一张表中有一条记录可以对应另外一张表中的多条记录:但是反过来,另外—张表的一条记录只能对应第—张表的一条记录,这种关系就是一对多或多对一。

应用场景:在学生表中增加一个字段指向班主任表,因为学生表的记录只能匹配到一条班主任表的记录,而班主任表的一条记录会对应多条学生记录

  • 班主任表:ID、姓名、年级、性别、班级
  • 学生表:ID、姓名、年龄、性别、班级、班主任ID(班主任表的主键)

一对多或多对一建表原则:

  • 外键创在多的一方(从表) ,先创一的一方(主表),多的一方的外键要指向一的一方的主键

多对多(many-to-many)

一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录。要表示多对多的关系,必须创建第三个表,改表通常称为联接表,它将对多对关系划分为两个一对一的关系,并且两个多对多的表的主键都要插入联结表中。

应用场景:一个老师教过多个学生,一个学生也有多个老师,增加一张老师学生表,维护了中间关系;老师表与老师学生表形成一对多的关系,而老师学生表是多表;维护了能够唯一找到一表的关系;同样的学生表与老师学生表也是一个一对多的关系;

学生找老师:找出学生ID—>中间表寻找匹配记录(多条)—>老师表匹配(一条)

老师找学生:找出老师ID—>中间表寻找匹配记录(多条)—>学生表匹配(一条)

  • 老师表:t_id、姓名、性别
  • 学生表:s_id、姓名、性别
  • 老师学生表:ID、t_id、s_id

自我连接(Self reference)

在一张表里引用自己的字段,这个表可以和它自身做连接运算。

在这里插入图片描述

Logo

更多推荐