我有一个具有以下(相对)结构的单表:
foo_id, parent_foo_id, foo_name
我想用这些实体构建一个(有效的)无限深度递归数组,然后将它们输出到树形菜单中。没有“parent_foo_id”的节点将被视为层次结构的顶部,而所有连续节点将显示为其父节点的子节点。
处理此类数据设计的最佳方法是什么?
就我而言,在关系数据库中存储分层数据一直很麻烦。递归方法(或邻接方法)总是迟早会遇到性能问题,其他方法更难实现。
我在嵌套集方法上取得了最大的成功,它从一个完全不同的角度来管理分层数据。但是,很难自己实施和维护。幸运的是,Doctrine ORM具有使用此算法管理树数据的行为,因此我建议查看此树遍历方法背后的理论,然后查看 Doctrine 代码以了解实现此技术的窍门。