zoukankan      html  css  js  c++  java
  • 数据库设计树形结构的技巧

    前言

    当业务中遇到树形结构时,比如菜单,省市区,部门等时如何设计数据库。一种设计可以通过每个字段带有parent id 来递归获取所有的节点 ,也可以通过另一种方法来获取某个节点的子节点

    使用level记录当前节点的父节点code

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

    id level parent
    1 0- 0
    2 0-1- 1
    3 0-1-2- 2

    当查询id为2 的子节点时

    select l.* from (select level from table
            where id = 2 )as le,
            table l
            where l.`level` like concat(le.level,'%') 
    

    使用union包括该节点

    下面这种不行,因为如果查某个根节点(0-)则会查出所有根节点,如果有company id 也可

    select id, level from res_location where level like concat((select level from res_location where id = 233),'%')
    
    小结 :
    • 小问题1 level是否会重复(不加id,只通过level查)
    • 小问题2 0-1-11 和0-1-111 如果通过0-1-11%也会把后者查出来,所以level后面再加个-符

    References

  • 相关阅读:
    【Nginx】开启 gzip和缓存
    webpack分离css单独打包
    【转】为什么Github没有记录你的Contributions
    Swiper使用遇到的问题
    Jenkins 自动化构建
    Pre标签 自动换行
    Gulp入门教程
    计数排序
    直接插入排序
    等差素数列
  • 原文地址:https://www.cnblogs.com/wei57960/p/14607030.html
Copyright © 2011-2022 走看看