【数据库】一对一、一对多、多对多关系

图解数据库一对一、一对多、多对多关系

一、一对一

【数据库】一对一、一对多、多对多关系

如上图:人与身份证存在1:1关系

存储时,不论是围绕人还是围绕身份证建表,一行数据代表一条关系,通常建立员工表(身份证作为一个属性)

 

二、一对多

【数据库】一对一、一对多、多对多关系

如上:一个班级可拥有多个学生,一个学生属于一个班级,班级与学生存在1:n关系

存储时,建立学生表和班级表,班级主键id通常作为学生表的外键进行关联,以构建表之间的1:n关系。

为何?从正向思考,一个学生属于一个班级,学生id:班级id合情合理;从反向思考,一个班级拥有多个学生,但班级id通常作为主键,一张表中主键唯一,无法构建:班级1、学生1,班级1、学生2,班级1、学生3...的数据

 

三、多对多

【数据库】一对一、一对多、多对多关系

如上:一个学生可以选择多门课程,一门课程可以被多个学生选择,学生和课程存在m:n的关系

存储时,通常构建中间表,通过1:n的关系来转化m:n关系,通过中间表,可以减少数据字段冗余,节省磁盘空间;但是缺点也十分明显,涉及到多表间的关联查询。

最近,开发中遇到了m:n关系(部门和员工,一个员工可以属于多个部门),思考过用冗余字段来记录部门中有多少员工,员工属于哪些部门,但考虑到对这些字段的解析以及对应关系,深感后期会越来越麻烦,果断构建中间表。

参考:    https://blog.csdn.net/u013144287/article/details/79024130