【数据库】一对一、一对多、多对多关系
图解数据库一对一、一对多、多对多关系
一、一对一
如上图:人与身份证存在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.****.net/u013144287/article/details/79024130