密码:代表嵌套图?

问题描述

您将如何在Graph DB中表示图形。 F.e.助记符可能看起来像这样:

((a)->(b))->(c)
((a)->(b))->((c)->(d))

从某种意义上说,(c)的(a)->(b)充当单个节点,但内部是两个链接的节点。 当然,您应该能够进一步嵌套它们。

有一些图结构可以用来表示这个吗?


  (a)<-[:1]-(ab)-[:2]->(b)
  (ab)<-[:1]-(abc)-[:2]->(c)

???


@bouteillebleu:第二个变种

 (a)-[:fst]->(ab)-[:snd]->(b)
 (ab)->(c)

解决方法

一个节点引用任何大小和复杂度的整个子图的最简单,最简洁的方法可能是在该节点中存储一个cypher属性,该属性的值是可以生成所需子图的Cypher查询字符串。

作为示例,这是您如何表示特定subgraph1包含给定subgraph2的断言:

CREATE
  (subgraph1:Graph {cypher: 'MATCH p=(f:Foo)-[:HAS]->(:Bar) WHERE f.id = 123 RETURN p'}),(subgraph2:Graph {cypher: 'MATCH (f:Foo) WHERE f.id = 123 RETURN f'}),(subgraph1)-[:CONTAINS]->(subgraph2)

如果由subgraph1表示的实际子图由数十亿个节点和关系组成,则可能没有其他实际方法来表示子图。