很多人看到这个问题可能会觉得很简单 大部分人就比如按照我下面的2种表结构设计就可以了。
方案1:
1.部门表, id, name, parent_id
2.员工表, id, name,dept_ids(储存1,2,3类似的部门id 集合)
方案2:
1.部门表, id, name, parent_id
2.员工表, id, name
3.员工部门表, id, emp_id(员工id), dept_id(部门id)
本以为这么轻轻松松搞定!关系储存的 妥妥的。这下好了有一个这样的组织树结构:
部门10
|_部门1001
|_部门100101
|_部门100102
|_部门10010201
|_部门1002
|_部门100201
|_部门100202
|_部门1003
员工 “张三” 所属部门 部门100101, 部门10010201, 部门100201
此时有个场景 搞了某个 “内容“ 只有 部门100102 , 部门1002, 下的包含子部门人才有权限
光从明面上来看2个部门id 范围并没有产生交集,但是实际上 “张三”是拥有该 “内容”的权限
允许联表如何查询 拥有该"内容"权限的员工呢?假设数据量很大 用的分库分表在不考虑联表的情况下又如何实现?如果没有其他思路就看下面的注意点。欢迎大家把自己的更好想法提出来。大家一起讨论
注意点1
:需要一张 部门员工平铺表来实现部门下的下级和该员工的关系储存。
注意点2
:需要给部门ID 设定一个 增长规则比如一个员工在多个部门。 AA/AABB/AABBCC, AA/EE,
这种情况每个部门下的部门数量和深度就有了很大的局限性。
注意点
:需要给部门添加一个层级的字段, 比如 根部门为 0, 一级部门为 1 以此类推。