数据库设计技巧:一个字符串细节处理解决递归查询问题

问题提出

许多人在做开发时都会遇到这样的case,比如:需要维护一个部门层级结构,每个部门都要存储一个上级部门的id,记做parent_id, 当查询一个部门的所有子部门时,需要根据parent_id递归的查询到底层,层级深的部门需要查询次数特别多,那么问题来了,是否可以通过一个简单的设计满足一次查询某个部门的所有子部门呢?

技巧来了

答案是:有的

对于上图的部门层级结构,给出对应的数据库设计

具体说一下:添加一个辅助的varchar字段level,字段的逻辑是多个部门的id使用.来连接,假设首层使用0表示,每一个层级使用上一层的level拼接上.再拼接父级部门id来表示

比如 :UE(id:8)的上级部门是 前端开发(id:3),前端开发的上级部门是技术组(id:1),因此UE的level就是0.1.3,前端开发的level是0.1

这个时候如果查询技术部门下面的所有子部门,只需要使用字符串 0.1.% 去查询即可;查询前端开发的所有子部门,只需要使用字符串 0.1.3.* 去查询即可,即找到当前部门记录的level, 拼上 . 再拼上当前部门,再拼个.% 做后缀模糊匹配。子部门查询的伪代码如下:

level like ..%

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180103G01BBT00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区