今天单位有个小朋友问起,一对一,一对多,多对多 这三种关系该怎么理解。
一、一对一的关系
简单的说这个东西是和你绑定的,你和它都是唯一的对应关系。
举例说明: 你和你的身份证号,你和你的学生卡,你和银行卡 等等,这些关系都是一对一的关系。
数据表示:
表A (人员姓名表)
ID | 人员姓名 |
---|---|
ry1 | 张三 |
ry2 | 李四 |
表B (人员姓名表)
ID | 身份账号 | 外键 |
---|---|---|
sfzh1 | 422411********1234 | ry1 |
sfzh2 | 433411********2345 | ry2 |
二、一对多的关系
简单的说就是 一个 对应 多个
举例说明: 销售记录和销售明细,一条销售记录对多条的销售明细。
注意: 这里不要钻牛角尖,如果我一张单据就买一个东西呢,岂不是就是一对一的关系了?不对的,我们设计东西时,会设计成一对一吗?如果是,那出现一对多的情况时,该怎么处理呢?是否就出现了设计失误呢。设计是无法完美的,只能是尽善尽美,尽可能的将前期想到的在使用中可能会出现的情况,纳入系统设计中。
数据表示:
表C (销售单据表)
销售单号(主键) | 销售人员 |
---|---|
dh1 | 张三 |
dh2 | 李四 |
表D (销售明细表)
明细ID | 产品名称 | 外键 |
---|---|---|
mx1 | 上衣 | dh1 |
mx2 | 裤子 | dh1 |
一对多时,多 代表的这一张数据表,可设置外键,进行联表查询。
三、多对多的关系
可以理解为:一张表A中的一条记录可以对应另一张表B中的多条记录,另一张表B中的一条记录也可以对应一张表A中的多条记录
举例说明: 学生与老师的关系。一名老师同时教授多个学生,一名学生同时被多名老师教导(数学老师、语文老师 等等),因此是多对多的关系。
数据表示:
表E (学生表)
学号(主键) | 学生名称 |
---|---|
xh1 | 张小小 |
xh2 | 李大大 |
xh3 | 王乎乎 |
表F (销售明细表)
老师ID | 老师名称 |
---|---|
ls1 | 原老师 |
ls2 | 韩老师 |
表G (关系表)
关系ID(主键) | 学生ID | 老师ID |
---|---|---|
1 | xh1 | ls2 |
2 | xh2 | ls2 |
3 | xh3 | ls2 |
4 | xh1 | ls1 |
5 | xh2 | ls1 |
6 | xh3 | ls1 |
当出现对多对多的关系时,就要考虑好第三者关系表,用以存放多对多关系的外键
有很多类似的场景,都需要。如用户与角色的关系,角色与权限的关系等等,