1

我想将分层数据存储在 PostgreSQL 数据库中。我找到了 ltree 扩展,但它用于存储树结构数据,即只能有一个父节点。有什么办法可以调整它来存储多个父节点?

4

1 回答 1

5

是的,可以使用ltree 扩展来做到这一点,通过使用两个表:一个用于您的节点,另一个用于您的路径。Bustawin有一篇很棒的文章,介绍了如何通过这种策略使用这个扩展来处理 DAG。

对于具有多个父节点的节点,我们有必要为此类节点定义多个ltree路径,一条从每个父节点引出。假设我们有一个 DAG,它在节点 A、B、C 和 D 之间形成菱形:

A -> B
B -> D
A -> C
C -> D

使用扩展,您应该有一个与两条路径相关的节点 DA.B.DA.C.D. 两个查询都应该返回节点 D

SELECT * FROM nodes
JOIN paths ON paths.node_id = nodes.id
WHERE paths.ltree_path ~ "A.B.*{1}"
SELECT * FROM nodes
JOIN paths ON paths.node_id = nodes.id
WHERE paths.ltree_path ~ "A.C.*{1}"
于 2020-09-22T22:05:14.573 回答