树形结构数据存储方案(二): 物化路径

2017 年 8 月 31 日 数据库开发

(点击上方公众号,可快速关注)


来源:标点符

www.biaodianfu.com/path-enumeration.html

如有好文章投稿,请点击 → 这里了解详情


前一篇文章介绍了比较简单的邻接列表模式,物化路径其实更加容易理解,其实就是在创建节点时,将节点的完整路径进行记录。以下图为例:


按照Path Enumeration 进行存储后的结果如下:



此种方案借助了unix文件目录的思想,主要时以空间换时间。


查询某一节点下的所有子节点:(以Fruit为例)


SET @path = (SELECT path FROM pathTree WHERE node_name = 'Fruit');

SELECT * FROM pathTree WHERE path like CONCAT(@path,'/%');


如何查询直属子节点?需要采用MySQL的正则表达式查询:


SET @path = (SELECT path FROM pathTree WHERE node_name = 'Fruit');

SELECT * FROM pathTree WHERE path REGEXP CONCAT(@path,'/','[0-9]$');


查询任意节点的所有上级:(以Yellow为例):


SET @path = (SELECT path FROM pathTree WHERE node_name = 'Yellow');

SELECT * FROM pathTree WHERE @path LIKE CONCAT(path, '%') AND path <> @path;


插入新增数据:


SET @parent_path = ( SELECT path FROM pathTree WHERE node_name = 'Fruit');

INSERT INTO pathtree (path,node_name) VALUES (CONCAT(@parent_path,'/',LAST_INSERT_ID()+1),'White')


此方案的缺点是树的层级太深有可能会超过PATH字段的长度,所以其能支持的最大深度并非无限的。


如果层级数量是确定的,可以再将所有的列都展开,如下图,比较试用于类似行政区划、生物分类法(界、门、纲、目、科、属、种)这些层级确定的内容。



参考文章:


  • https://communities.bmc.com/docs/DOC-9902



看完本文有收获?请转发分享给更多人

关注「数据库开发」,提升 DB 技能

登录查看更多
0

相关内容

[ICML2020]层次间消息传递的分子图学习
专知会员服务
33+阅读 · 2020年6月27日
【MIT-ICML2020】图神经网络的泛化与表示的局限
专知会员服务
42+阅读 · 2020年6月23日
【斯坦福CS520】向量空间中嵌入的知识图谱推理,48页ppt
专知会员服务
99+阅读 · 2020年6月11日
【ICLR2020-哥伦比亚大学】多关系图神经网络CompGCN
专知会员服务
49+阅读 · 2020年4月2日
【斯坦福大学-论文】实体上下文关系路径的知识图谱补全
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
一文看懂怎么用 Python 做数据分析
大数据技术
23+阅读 · 2019年5月5日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
在NLP中深度学习模型何时需要树形结构?
全球人工智能
5+阅读 · 2018年3月29日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
项目实战:如何构建知识图谱
PaperWeekly
29+阅读 · 2017年9月14日
Caffe 深度学习框架上手教程
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月12日
dynnode2vec: Scalable Dynamic Network Embedding
Arxiv
13+阅读 · 2018年12月6日
Arxiv
3+阅读 · 2018年10月25日
VIP会员
相关资讯
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
一文看懂怎么用 Python 做数据分析
大数据技术
23+阅读 · 2019年5月5日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
在NLP中深度学习模型何时需要树形结构?
全球人工智能
5+阅读 · 2018年3月29日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
项目实战:如何构建知识图谱
PaperWeekly
29+阅读 · 2017年9月14日
Caffe 深度学习框架上手教程
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月12日
Top
微信扫码咨询专知VIP会员