当前位置: DB社区 > 02-mysql > 阅读正文

SQL 多表关系

2021.9.9.   413 次   717字

一对一关系

任一表的主键作为另一个表的外键,(或者直接合并为一张表)

表一:学生表student, 学号,姓名,年龄

idnameagecid
1张三381
2李四992

表二:身份证表card,表id,身份证号

idnumber
1423537261534
2472895623897

一个学生对应一个身份证,一个身份证对应一个学生

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

(要保证每个 cid 是唯一的,number是唯一的,需要添加 unique 唯一约束)

如果没特殊限制,可以直接把身份证号,合并到 student 表中,更方便

一对多关系

主键在“一”的那方,多的一方使用外键引用“一”的主键

表一:部门表dep,有部门 id ,和部门名称

didname
1财务部
2销售部

表2:员工表emp,有员工id,姓名,年龄,部门id

eidnameagedep_id
1张三182
2李四191
3王五202

一个员工只有一个部门,一个部门有多个员工。也就是说,多个员工对应一个部门

我们在“一”的一方(部门)建立主键,多的一方引用外键dep_id(员工)

多对多关系

多对多关系,通常需要借助中间表,实现属性的对接

表一:学生表student,学号sid,姓名,年龄

sidnameage
1张三17
2李四28
3王五49

表二:课程表class,课程号cid,课程名称

cidname
1英语
2数学

一个学生可以选择多们课程,一个课程可以有多个学生,所以是多对多关系

我们需要借助一张或多张中间表,如这里增加一个选课表

表三:select,分别包含2张表的主键,学号和课程号

sidcid
11
12
22

(注意:这里的选课表比较简单,应该要保证每个字段是唯一的)

(可以把学号和选课号作为联合主键,确保非空和避免重复)

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群