微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – PostgreSQL – 树组织

我正在开发一个项目,需要一个类别树,组织为id,parent,title table.在Postgres中哪些是检索类别及其子类别(以及完整树,如果根类别具有parent = 0)的最佳方法?我正在寻找一个数据库解决方案,但如果有一种方法可以用于RubyPHP – 它也会很棒.

主要目标是选择子句的速度,因为此表中的数据对于更新/插入/删除速度并不重要.

UPD:还会有路径搜索,我的意思是从当前顶点(类别)到根类别的路径.

解决方法:

retrieve category and its subcategories

如果您只有有限的子项目深度,您可以使用自联接来完成此操作,例如.两层深:

SELECT *
FROM categories AS child
LEFT JOIN categories AS parent ON parent.id=child.parent
LEFT JOIN categories AS grandparent ON grandparent.id=parent.parent
WHERE child.id=(id) OR parent.id=(id) OR grandparent.id=(id);

对于使用标准sql而不是’parent-id-foreign-key’类型模式的任意深度层次结构,您不能这样做.

有些DBMS提供了非标准的分层工具,允许以各种方式使用这种类似的东西,但如果你想坚持使用跨DBMS兼容的代码,你需要将模式重新设置为表示层次结构的更好模型之一.两个流行的是:

> Nested Set.存储一个线性排序,表示目标表的两列中树的深度优先搜索(如果您的目标具有显式排序,则其中一个已经拥有).
> Adjacency Relation.将每个祖先/后代对存储在单独的连接表中.

每种方法都有优点和缺点,并且有许多变体(例如,稀疏嵌套集编号,AR中的“距离”),这可能影响各种类型的添加/删除/移动位置操作的成本.我个人倾向于倾向于简化嵌套集模型,因为它包含的冗余少于AR.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐