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

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

作者: Ukuleler | 来源:发表于2018-05-04 22:15 被阅读0次

许多人在做开发时都会遇到这样的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 {level}.{id}%

作者: Jimin
链接:http://www.imooc.com/article/21103
来源:慕课网

相关文章

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

    许多人在做开发时都会遇到这样的case,比如:需要维护一个部门层级结构,每个部门都要存储一个上级部门的id,记做p...

  • 递归算法

    递归是解决问题最常用的方法,比如,解决二叉树问题,最容易想到的就是递归算法,首先处理根结点,然后递归处理左右子树。...

  • 链表反转

    反转类型问题是面试中的常见问题。如反转字符串,反转链表等,今天给出利用递归和非递归方法解决反转链表问题的两个解决思...

  • 递归

    1.递归是什么? 定义:程序调用自身的编程技巧称为递归。递归使用的是选择结构,对于解决同样问题的孪生兄弟:迭代,它...

  • java中常见的递归使用场景

    一、递归概述 程序调用自身的编程技巧称为递归.递归作为一种算法在程序设计语言中广泛应用。递归需具备的条件: 子问题...

  • 递归、 IO流

    递归 递归解决问题的思想做递归要写一个方法找到出口条件找到规律 IO流概述 IO流用来处理设备之间的数据传输 上传...

  • mysql查询保持in的顺序

    目的:解决mysql的in语法查询顺序问题 mysql数据库总,使用in语句查询,查询结果默认会根据主键id排序。...

  • 快速过算法设计思想

    分而治之 算法设计的一种方法。 它将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将结果合并以解决原来的...

  • sql实现简单自增长

    在设计数据库表的过程中,主键一般都设为自增长,数据库产品自带的序列可以解决这个问题。 其实,用简单的sql查询语句...

  • CCF201709-3 JSON查询(JAVA)

    又是一道需要递归处理的题目,把JSON看做一个对象,process用于递归处理一个对象 本题需注意的细节 永远卡掉...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/wjvjrftx.html