mysql无限层表设计方案分析

目录

需求接口

思路1:记录父ID

思路2:闭包表(空间换时间)

思路3:存储路径

三种方式对比


本文所用的层级关系图 

需求接口

1、获取子级/所有子级列表/所有子级树

2、获取父级

3、增删改

思路1:记录父ID

CREATE TABLE `XXX` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `parent_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '上级ID',
  `is_leaf` tinyint(2) NOT NULL DEFAULT '0' COMMENT '叶子结点标记:0非叶子,1叶子',
  ...
} 

存储结果(根据文章开始的图中ID)

思路2:闭包表(空间换时间)

两个表,每个关系都存起来

create table XXX_base{
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar() NOT NULL COMMENT '',
  ...
}

create table XXXrelation{
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `base_id` bigint(20) unsigned NOT NULL COMMEMT '基础信息表ID',
  `base_parent_id` bigint(20) unsigned NOT NULL COMMEMT '上级的基础信息ID',
  `diff_level` tinyint(2) NOT NULL DEFAULT '0' COMMENT '与父节点相差的层级',
  `is_leaf` tinyint(2) NOT NULL DEFAULT '0' COMMENT '叶子结点标记:0非叶子,1叶子',
  ...
}

存储结果(根据文章开始的图中ID)

思路3:存储路径

存储从第一层到自己的路径

CREATE TABLE `XXX` (
  `id` bigint(20) unsigned NO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值