一对一
一张表种的一条记录与另外一张表最多有一条明确的关系,通常此涉及方案保证两张表使用相同的主键即可。
学生表
Sid | 姓名 | 年龄 | 性别 | 籍贯 | 住址 | 婚否 |
表的使用过程中,常用的信息会经常去查询,而不常用的信息偶尔才会用到。
解决方案:将表拆分,常见的放一张表,不常见的放一张表
常用表
Sid | 姓名 | 年龄 | 性别 |
不常用表
Sid | 籍贯 | 住址 | 婚否 |
一对多
通常也叫做多对一,看你从什么角度去看,通常一对多的关系设计方案种,在多的关系表中,去维护一的字段,这个字段是一关系的主键。
母亲表
母亲ID | 姓名 | 年龄 | 身高 |
M1 | |||
M2 |
孩子表
孩子ID | 姓名 | 年龄 | 身高 | 母亲ID |
K1 | ||||
K2 |
是否可以在母亲表中增加孩子的id呢?
理论上可以,但是不方便。
多对多
多对多:一张表中的一条记录可以在另外一张表中匹配多条记录,反过来也一样。
多对多的关系如果按照多对一的关系维护,就会出现一个字段种有多个其他表的主键,在访问的时候就会带来不便。
既然通过两张表自己增加字段解决不了问题,那么就通过第三张表来解决。
师生关系:
- 一个老师教过多个班级的学生
- 一个学生会听过多个老师的课
首先要有两个实体,学生表和老师表
老师表
TID | Name | Age | Gender |
T1 | |||
T2 |
学生表
SID | Name | Age | Gender |
S1 | |||
S2 | |||
S3 | |||
S4 |
从中间设计一张表,维护两张表的对应 关系,每一种关系都包含
中间表
Id | TID | SID |
1 | T1 | S1 |
2 | T1 | S2 |
3 | T2 | S1 |
多对多的解决方案,增加中间表,让 中间表与对应的其他表形成两个多对一的关系,多对一的解决方案是在多的表中增加一表对应的主键字段。