无限分类法

简介:

 

另一种的无限分类法

 

 

MYSQL中,数据表大致上是

CREATE TABLE Table_Types

(

 id INTEGER NOT NULL AUTO_INCREMENT,

 parent_id INTEGER,

 node VARCHAR(255),

 PRIMARY KEY (id)

)

 

 

<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/5iasp/EntryImages/20090417/type.JPG">

如上图,紫色的是数据记录的ID号,框内的数字是每条记录的node字段,记录了该记录的父ID和父ID的父ID...

这样,假如我们要在ID7的记录下,插入一条新ID13的记录,新记录的node就是1,2,7,13

要找一个节点下的所有子节点,就无需用递归,只要一个SQL

如“查ID2记录下所有子节点”

select * from Table_Types where node like "1,2,%"

大家探讨一下,该算法的有效性和不足!

上次看到的左右值的算法,虽然在搜索方面很不错,但是如果是插入频繁的应用,性能就很差了,因为每次插入新节点都需要update该父节点以下的所有记录。的右值。而上面这个算法,对插入操作尤其简单,只要找到父ID的根下来就可以了。搜索方面好像也还不错,都是避免了递归。

 

目录
相关文章
|
7月前
|
数据中心 网络架构 Python
【计算巢】数据中心的网络架构设计原则
【5月更文挑战第31天】探讨数据中心网络架构设计原则:稳定性是基础,需抵御各种挑战;强调扩展性,适应业务发展;追求高效,确保数据传输速度;注重灵活性,灵活应对变化。简单Python代码示例展示网络节点连接。设计时需具备长远眼光,综合考虑技术方案,以构建坚固高效的信息桥梁。同学们,要持续学习和探索,为信息世界贡献力量!
94 2
|
7月前
|
开发工具 C语言 git
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
151 0
|
移动开发 缓存 前端开发
JS之跨域方式实现原理(超详细)
JS之跨域方式实现原理(超详细)
442 1
JS之跨域方式实现原理(超详细)
|
存储 算法 API
3.2.3存储服务开源 Openstack|学习笔记
快速学习3.2.3存储服务开源 Openstack
3.2.3存储服务开源 Openstack|学习笔记
|
安全 编译器 索引
理解String 类(下)
理解String 类(下)
96 0
理解String 类(下)
|
设计模式 编译器 Go
Go 软件设计之道
重要的是要记住,在 Go 中,子类型或子类的概念真的不存在,这些设计模式应该被避免。
Leetcode-Easy 20. Valid Parentheses
Leetcode-Easy 20. Valid Parentheses
109 0
Leetcode-Easy 20. Valid Parentheses
|
设计模式 Java 测试技术
Java动态代理设计模式
就是为其他对象提供一种代理以控制对这个对象的访问。代理可以在不改动目标对象的基础上,增加其他额外的功能(扩展功能)。
143 0
|
运维 机器人 编译器
云服务器的使用体验
首先进入阿里云云服务器,使用vim编辑markdown文件,使用git进行版本控制,使用vim编辑cpp文件,使用g++进行编译。通过使用vim,我知道了vim的大部分操作方法与快捷键,以及vim编辑使用的普遍性,和markdown文件的适用性。我也了解到了g++是c++编译不可缺少的。我们大一使用的c++编译器就预先搭建了g++。之前就有使用git的经历,现在通过更加深入学习,我发现git功能更加强大的地方。git在我们的项目开发、程序设计中的应用非常广泛、重要。git对我们的代码管理能方便我们程序的错误处理和保存。同时,我们学校也为我们学生提供了良好的git管理平台。
云服务器的使用体验
|
程序员 Python
Py之MT:Multithreaded的简介、引入、使用方法之详细攻略(一)
Py之MT:Multithreaded的简介、引入、使用方法之详细攻略
Py之MT:Multithreaded的简介、引入、使用方法之详细攻略(一)