在 SQL 中遍历树:JOIN 与命令式算法

数据挖掘 图表 sql
2021-09-17 20:51:28

我有一张表格,代表留言板上的帖子。帖子可能有也可能没有父母。

从给定帖子开始获取所有帖子或查找任何给定帖子的根帖子的最常见方法是什么?

我可以考虑使用 JOIN 来加入父母和孩子,但是在我停止之前我怎么知道我需要多少个加入呢?

1个回答

有几种模型用于在关系数据库中保存分层数据。这里有一个很好的总结总而言之,它们是

  • 邻接表:每一行都包含一个外键到它的父级。结构变化快。需要递归处理才能找到基本祖先。
  • 路径枚举:每个节点存储它的祖先。更新需要更新所有子项。对于到达根的已知节点不需要进一步的工作。
  • 嵌套集:附加列包含祖先。结构更改的成本取决于移动子树的大小。根节点很快就能找到。
  • 闭包表:存储所有祖先-后代对。结构更改可能代价高昂。根节点的识别成本很高。

从给定的信息来看,路径枚举听起来像是您的最佳选择。