数据库的多表操作中多对多的情况很多,这时候我们就需要中间表作为媒介,帮我们完成多表之间的关联.
直接用例子来说明,假设现在有一张用户表,一张角色表和一张权限表,一个用户可以由多个角色,一个角色可以有多个权限,而一个角色可以被多个用户所拥有,一个权限可以被多个角色所拥有.这三者的关系都是多对多.
这时候我们可以利用中间表来清楚地表达他们之间的关系,user_role表中,通过userID和roleId将两者关联. role_permission表中,通过roleId和permissionId将两者关联
实际操作中,当我们需要查某个用户拥有什么权限时候,可以通过userId在user_role表中获取当前用户所有的角色,每个角色由又可以用角色的roleId通过role_permission表找到各个角色的权限,全部返回,即可获得某个具体的用户所拥有的所有权限
### 由图可以看出,当我们在删除用户表中的某个用户时,必须先把中间表user_role中所有包含当前用户userId的记录,然后再删除user就可以了,permission同理. ### **特别注意的是,当需要删除某个角色时,因为角色的roleId在两个中间表中,都是作为外键的存在,所以我们必须先删除user_role中包含当前roleId的记录,同时删除role_permission表中包含当前roleId的记录.最后,我们才能删除指定角色,不然数据库会报错.**