皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

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

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

以下图举例数据举例:

tree

创建主表:

创建关系表:

其中

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

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

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

Closure-Table-1

Closure-Table-2

查询 Fruit 下所有的子节点:

查询 Fruit 下直属子节点:

查询 Fruit 所处的层级:

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

参考链接:

  • https://coderwall.com/p/lixing/closure-tables-for-browsing-trees-in-sql
  • 转自 http://blog.jobbole.com/112315/
分享到:更多 ()