【问题标题】:Infinitely Deep Recursive Children无限深递归子代
【发布时间】:2009-10-15 03:07:28
【问题描述】:

我有一个具有以下(相对)结构的单表:

foo_id, parent_foo_id, foo_name

我想用这些实体构建一个(有效的)无限深度递归数组,然后将它们输出到树形菜单中。没有“parent_foo_id”的节点将被视为在层次结构的顶部,而所有后续节点将显示为其父节点的子节点。

进行此类数据设计的最佳方法是什么?

【问题讨论】:

  • 我认为你的意思是任意深度,而不是无限深度。
  • 您可能想说明您希望使用的语言或语系。
  • @Tchalvak,标签上写着 SQL + PHP。

标签: php sql recursion hierarchy semantics


【解决方案1】:

就我而言,在关系数据库中存储分层数据一直很麻烦。 递归方法(或邻接方法)总是迟早会遇到性能问题,其他方法更难实现。

我在nested set method 方面取得了最大的成功,它从完全不同的角度来管理分层数据。但是,很难自己实施和维护。 幸运的是,Doctrine ORM 有一个使用此算法的 behavior to manage tree data,因此我建议查看此树遍历方法背后的理论,然后查看 Doctrine 代码以掌握实现此技术的窍门。

【讨论】:

  • 呃。如果您不能容忍更新(例如,使用只允许插入的记录方法),则无法使用嵌套集。
【解决方案2】:

不久前我问了一个类似的question。我的问题特别与 SQLite 有关,但由于 SQLite 语法往往是大多数其他 SQL 风格的最小公分母子集,它也应该适合你。你可以随意忽略所有 iPhone 的东西,因为它们无关紧要。

我希望这至少可以帮助您入门。

另外,请参阅this,了解我在使用不同实现方式进行实验时遇到的问题(及其解决方案)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2011-02-07
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多