08 表关系:一对一、多对一、多对多
表关系
数据库中,表与表之间的关系,决定了后期表结构的设计
分类
一对一
一张表中的一条记录与另外一张表中的记录一一对应
学生信息表:
常用信息:学生ID、姓名、年龄、性别
不常用信息:籍贯、婚否、住址
学生ID | 姓名 | 年龄 | 性别 | 籍贯 | 婚否 | 住址 |
---|---|---|---|---|---|---|
拆分表:
常用表
学生ID | 姓名 | 年龄 | 性别 |
---|---|---|---|
不常用表
学生ID | 籍贯 | 婚否 | 住址 |
---|---|---|---|
其中,学生ID是连接2张表的唯一值
一对多(多对一)
通常一对多的关系设计方案是:在‘多’关系的表中,去设置一个字段,这个字段就是 ‘一’ 关系的主键
比如:一个母亲可以有多个孩子,一个孩子只能有一个母亲
母亲表(一 的关系):
母亲ID | 姓名 | 年龄 | 身高 |
---|---|---|---|
孩子表(多 的关系):
孩子ID | 母亲ID | 姓名 | 年龄 | 身高 |
---|---|---|---|---|
多对多
多对多:一张表中的一条记录,在另外一张表中可以匹配到多条记录;反过来,另外一张表中的一条记录,在一张表中可以匹配多条记录
例如:师生关系
1、 一个老师教过多个班级的学生
2、 一个学习上过多个老师的课程
老师表:
Tid | name | age | gender |
---|---|---|---|
t1 | 张三 | 32 | 男 |
t2 | 李四 | 40 | 女 |
t3 | 王五 | 45 | 男 |
学生表:
Sid | name | age | gender |
---|---|---|---|
s1 | 小兰 | 22 | 男 |
s2 | 小明 | 23 | 女 |
s3 | 小绿 | 26 | 男 |
s4 | 小红 | 30 | 男 |
中间表: id主键id Tid:老师id Sid学生id
通过设置了一个 中间表,可以将 学生表和老师表的关系,联系起来
所以,一般多对多的表的设计的解决方案是:增加一个中间关系表,让中间表与其他的表形成2个多对一的关系
多对一对的解决方案是:在‘多’关系表中设置一个 ‘一’ 表中的主键
id | Tid | Sid |
---|---|---|
1 | t1 | s1 |
2 | t1 | s3 |
3 | t2 | s1 |
3 | t2 | s3 |
4 | t3 | s2 |
4 | t3 | s2 |