定义:
多对多关系是关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关
理解:
产品和订单是多对多:单个产品可能出现在多个订单中。单个订单可能包含多个产品。
用户和角色是多对多:单个用户可以拥有多个角色。单个角色可能出现在多个用户中。
学生和班级是一对一:一个学生只能属于一个班级
班级和学生是一对多:一个班级可以有多个学生
本质:
外键在主表中出现的次数决定了它们之间的关系。
外键(一个班级id号)在主表(studnet)中出现多次-------一对多
外键(一个学生id号)在主表(class)中只能出现一次--------一对一
通俗理解:
一对一
谈恋爱的时候,你跟你的女票属于一对一关系。基于你个人来讲,你只能拥有一个女票,基于你女票来讲,她只能拥有一个男票。
一对多
渣男:你有很多个女票,你的这些女票都只有你这一个男票。渣女:你只有一个女票,你的女票有很多个男票,你是她众多男票中的之一。
多对多
交朋友的时候,你可以有很多个朋友,你的朋友也有很多个朋友。这个时候,基于你的角度,你只看到你跟你的朋友之间的关系,你就像一个点,向不同的人发出交友射线,你的朋友跟你达成协议,你们成为好朋友。站在你朋友的角度,他发出多条交友射线,而你只是这些射线中之一。最后,你中有我,我中有你(我的朋友圈,你在里面。你的朋友圈,我在里面)。
在多对多的理解当中,一个概念很重要。就是多对多,是两个表中的互相一对多,这里面的重点就是这个一,也就是你也在站在一的角度看,你是不是对应了多条数据,这样不容易搞混关系。
比如,期末考试。
同一个时间,有不同教室进行考试。
同一个教室,在不同的时间进行考试。
第一句话,同一时间,可以再具象说同一个时间点,这个点很重要,比如早上9点,只有这一个点,不同的教室,比如A教室,B教室,C教室。一个时间点,多个教室点,一对多。
第二句话,同一个教室点,比如这个教室指定A教室,讨论都针对A教室这个地方点,可以有不同的时间点,比如早上9点,下午3点,晚上6点。一个教室点,多个时间点,一对多。