2017年9月1日星期五

树形结构数据存储方案(三):闭包表


Linuxeden 开源社区 --tree

将 Closure Table 翻译成闭包表不知道是否合适,闭包表的思路和 物化路径 差不多,都是空间换时间,Closure Table,一种更为彻底的全路径结构,分别记录路径上相关结点的全展开形式。能明晰任意两结点关系而无须多余查询,级联删除和结点移动也很方便。但是它的存储开销会大一些,除了表示结点的 Meta 信息,还需要一张专用的关系表。

以下图举例数据举例:

tree

创建主表:

创建关系表:

其中

  • Ancestor 代表祖先节点
  • Descendant 代表后代节点
  • Distance 祖先距离后代的距离

添加数据(创建存储过程)

完成后 2 张表的数据大致是这样的:(注意:每个节点都有一条到其本身的记录。)

Closure-Table-1

Closure-Table-2

查询 Fruit 下所有的子节点:

查询 Fruit 下直属子节点:

查询 Fruit 所处的层级:

另外要删除节点也非常的简单,这里就不再做过多的阐述。

参考链接:

  • http://ift.tt/1zLTnRe
  • 转自 http://ift.tt/2gsi4Vu

The post 树形结构数据存储方案(三):闭包表 appeared first on Linuxeden开源社区.

http://ift.tt/2vxB5MM

没有评论:

发表评论