本文共 1109 字,大约阅读时间需要 3 分钟。
在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过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%';