公司要做一个树状结构,列表展示的时候不仅要有节点信息,还要有该节点的路径信息。

众所周知mysql没有oracle 的递归查询,如果Java代码中查询的话。列表页几十条数据。在每个节点层数不定时,其实时间都花费在数据库的连接上。

又不想mysql增加自定义函数(个人觉得不利于数据迁移)。所以学习了一下前人的树状结构表设计。

首先解决拿来主义

将第一套理论和第二套理论整合到一起。既可以解决效率问题,也可以满足常用的需求,当树状结构进行管理时。关联树状结构的信息只需要保存节点id就可以了。

树状结构变更时,tree_path的parent_id 都需要维护。

CREATE TABLE `event_link_tree` (`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '节点ID',`name` varchar(255) NOT NULL DEFAULT '' COMMENT '节点名称',`paernt_id` bigint(11) NOT NULL DEFAULT '0' COMMENT '父节点ID',`tree_path` varchar(255) NOT NULL DEFAULT '' COMMENT '节点路径信息例如/1/2/3/',`creater` varchar(255) NOT NULL DEFAULT '' COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` varchar(255) NOT NULL DEFAULT '' COMMENT '修改者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

方案一(Adjacency List)

CREATE TABLE tree(
node_id int,node_name varchar2(100),parent_id int);

这种结构应该是目前最常用的。

优点:1 便于直接查询已知节点的上下级节点。

2 增删改查比较便捷

缺点:无法一次查询得到层级关系。

方案二(Path Enumeration)

CREATE TABLE tree_Path(
node_id int,node_name varchar2(100),path varchar2(1000));

例子

优点:

1 解决了第一种方案的缺点无法查询路径的问题

2 而且可以通过以下的方法查询节点的父节点和子节点。

select id ,name,tree_path from event_link_tree where tree_path like '/1/2/%'
select id ,name,tree_path from event_link_tree where tree_path like '%/2/%'

另外两种,因为不符合自己的场景,所以不做细致说明,参考大牛文章,链接如下

https://blog.csdn.net/biplusplus/article/details/7433625

mysql的树状表结构设计。相关推荐

  1. mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现

    简介:mysql5.0.94版本,该版本以及较高级的版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的 ...

  2. mysql实现树状查询_MySQL实现树状所有子节点查询的方法

    本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...

  3. PHP和MySQL处理树状、分级、无限分类、分层数据的方法

    文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点.这是一个递归.分层形式.可以称之为树形层级数据. ...

  4. php和mysql处理树状_分级_无限分类_分层数据的方法_PHP和MySQL处理树状、分级、无限分类、分层数据的方法...

    文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点.这是一个递归.分层形式.可以称之为树形层级数据. ...

  5. ezdml 支付mysql 吗_EZDML数据库表结构设计器_设计sql、oracle、mysql数据库表结构 V2.39 免费版...

    很多程序员或者网站站长在设计网站数据库的时候都要进行表结构设计,如果您不想操作原始的数据库工具之想简单设计一下数据库表结构,那么你不妨试试这款EZDML数据库表结构设计器,可以快速设计sql.orac ...

  6. 【数据库2】生成txt/xml文件,ftp,oracle安装/表操作/虚表/日期/序列/索引/视图/链路/同义词/高可用性,mysql/文件入库/清理/表结构设计/交换/收集

    文章目录 1.生成数据:crontab 2.ftp:ftp是tcp/ip协议族中一员,分客户端和服务端 2.1 安装:linux操作系统的用户也是ftp的用户,可以配置专用的ftp用户,专用的ftp用 ...

  7. mysql 存树 闭包表_关系型数据库树形关系存储-闭包表

    前言 在关系型数据库中,有一种逻辑关系比较难处理,这种就是树形结构.目前有很多主流的处理方案,比如说直接在业务表中存储上一级id,这样就可以用递归查询SQL的形式找到某一节点的父节点,子节点,或者兄弟 ...

  8. MySQL数据库调优————表结构设计优化

    三范式 第一范式 字段具有原子性,即数据库表的每一个字段都是不可分割的原子数据项,不能是集合.数组.记录等非原子数据项 当实体中的每个属性有多个值时,必须拆分为不同的属性 第二范式 满足第一范式的基础 ...

  9. mysql st_contains实现_MySQL实现树状所有子节点查询的方法

    本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...

最新文章

  1. AutoMapper 使用实践
  2. C#趣味程序----分数之和
  3. Exynos4412裸机开发 —— A/D转换器
  4. 《零基础》MySQL LIKE 子句(十六)
  5. ModelArts黑科技揭秘|弹性训练,让训练资源张弛有度
  6. 高中计算机网络功能,高中生自我教育中如何发挥计算机网络信息的作用
  7. mongodb日志切割
  8. MOSFET(三):电源缓启动
  9. 温度传感器利用寄存器计算出温度值
  10. 分析数据包(Microsoft Visual Studio 2010)
  11. 在vue中使用jsmind组织架构或思维导图
  12. c语言for循环语句试讲,C语言For循环试讲教学教案(7页)-原创力文档
  13. waterfall model
  14. RFID打印机和条码打印机的4大区别
  15. 达奇机器人不能用电脑编程吗_奇幻工房智能编程机器人达奇dash编程容易学吗?适合几岁小朋友玩?...
  16. windows中truffle unbox react失败总结
  17. android打开蓝牙设置界面,Android 点击跳转到蓝牙设置界面
  18. 游戏脚本用什么语言写_为什么要写分镜头脚本?
  19. 如何解决报错500的问题
  20. 蓝牙学习之旅——低功耗蓝牙之频带和通道

热门文章

  1. uefi怎么念_UEFI是什么,看完您就全明白了
  2. 《ai绘画》最全stable diffusion安装教程 所有软件+所有指令
  3. Ansible自动化运维的安装及常用模块详解
  4. 只做macd二次金叉_macd二次金叉的定义
  5. Python——email模块
  6. AutoCAD二次开发基础(三):船体型线绘制
  7. Java_基本语法(标识符、数据类型、变量和常量)
  8. 中台实践:数据中台构建五步法
  9. 【原创】技术员 Ghost Win7 Sp1 x64 纯净版 2017
  10. 网络访问之——HTTP