• 一种多层级机构数据库表设计的思路


    在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询。

    level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。

    举个栗子:

    1、创建部门架构表:

    CREATE TABLE department (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '部门名称或下属机构名称',
    `level` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '部门级别字符串',
    `parent_id` BIGINT UNSIGNED NOT NULL COMMENT '父级主键id',
    `seq` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序号',
    `mtime` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
    `ctime` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
    `muser_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '修改人',
    `cuser_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
    PRIMARY KEY(`id`),
    KEY `idx_level` (`level`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT '部门架构表';
    2、生成如下数据

    3、业务图对应如下

    level说明:

    UE(id是6)是属于前端开发(id是3),而前端开发是属于技术组(id是1),因此,UE的level是0.1.3 依次为顶级的id到最靠近自己的id。

    使用场景:

    比如:

    (1)如果想查询所有技术组下一级的架构,可以用如下sql语句:

    SELECT * FROM department WHERE `level` LIKE '0.1';

    (2)查询所有技术组下所有的架构包括下一级的下一级等等

    SELECT * FROM department WHERE `level` LIKE '0.1%';


    ---------------------
    作者:timchen525
    来源:CSDN
    原文:https://blog.csdn.net/timchen525/article/details/81175224
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Linux内核参数优化
    Linux:文件系统层次结构标准(Filesystem Hierarchy Standard)
    全球海底光缆及我国海底光缆分布
    CentOS单网卡绑定双IP
    Weblate 2.11安装配置文档
    Docker安装及常用命令
    好文要保存
    rsh命令配置于使用
    RHEL(或CentOS)中关于逻辑卷( Logical Volume Manager,LVM)的一些概念及使用LVM的例子
    git学习资料
  • 原文地址:https://www.cnblogs.com/zhanying999666/p/10535289.html
Copyright © 2020-2023  润新知