部门表设计咨询?

笑看轮回
  • 55
福建

相关表有部门表、用户表、部门用户关联表(一个用户可能归属多个部门),有如下需求,请求各位前辈大佬的解惑,谢谢!
1、需要能查询某个部门下面的全部用户,包含子部门的用户。
2、部门表可能会经常修改,网上有看到有些框架是使用的部门表添加一个祖级id完整路径,这样办法我思考过修改部门层级的时候不好处理层级关系

回复
阅读 1.5k
5 个回答
coco
  • 361
北京市
✓ 已被采纳

刚好我们的项目有这个场景
我们的做法是:
1,用户信息上有个部门id,不过我们是一个用户只能一个部门,你这个场景改成支持多个就行

2,部门设计,字段就是id,pid,name之类的,不要加path,这个确实会给修改带来很多麻烦

3,关于数据组成树状结构的问题:首先确定你们的需求,一般ui是一层一层点开,这时候就是根据pid查,如果是一次性返回某个部门下的所有部门,后台只需要轮询查到所有子部门信息即可,组装树结构的工作不应该放到服务器,给服务器减少压力,这种拼数据的工作应该在前端,避免前端需求改动还要改后端接口返回,做到前后端解耦,后端很多借口有时候很多地方会掉,不要为某一个情景去做处理,后端直接数据库查出来返回给前端就好,前端组树结构也很简单,无非就是先找到根,这个两行代码的事,然后在循环去找每个部门的下级部门而已

4,关于path,这个确实是个头疼的问题,我们专门做了个根据部门id去查部门path的接口供其它场景使用,path在整个后端业务中没有任何处理

5,关于查用户,如果要查某个部门下的子部门和用户,做两个接口,一个是根据部门id查子部门,一个是根据部门id查部门下的人,前端自己去分别掉就可以

有祖级路径的查询时简单,修改麻烦。
没祖级路径的查询时麻烦,修改简单。

推荐祖级,毕竟修改没用查询操作那么多。
mysql 也支持递归查找父级id,查询逗号分割的也有 FIND_IN_SET() 函数.

风起微凉
  • 4
广东新手上路,请多包涵

看查多还是改多,查多写缓存表。

使用的是什么数据库? 如果是支持cte的数据库(如postgres, mysqk8), 那么用 cte 递归表达式查 子部门就行. 如果不支持cte, 那就得加个字段, 保存部门的路径 .

怎么就麻烦了?目前的各大ui框架对于树形结构支持的还是很好的吧,基本都暴露了相关api。有什么麻烦的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏