我正在构建一个位于图形数据集上的应用程序,此图形中的节点可以是其他较小的图形,其中节点可以与主图形节点建立连接。
A(绘制得很糟,抱歉:D)ASCII艺术来补偿我(不好,对不起:D)英文:
// \\BAR
||(x)---(y)||
|| / ||\
|| (z) ||\\
\\ | // \\
// | \\_________
// | \
// | // \ \\
FOO // | ||(harry)---(terry)||
// \\ | || / ||WORLD
||(a)---(b)|| | /|| (jerry) ||
|| \ || | // \\ //
|| (c) || / // \\/
\\ | // / || HELLO ||
\___________/ \\ //
节点x,y和z是BAR图的节点,FOO图的a,b和c,对于harry ecc ..和WORLD图也是如此。
FOO,BAR,WORLD和HELLO是主要大图的节点。
在此结构内部,FOO的节点连接到BAR中的节点(c - > z),这是棘手的部分)WORLD的节点连接到BAR(harry - > BAR)。
我知道如何在python中使用Networkx实现这一点,但是如何将其保存到数据库?
我正在考虑解决方案,但我想知道是否有类似情况的理论或技巧。
到目前为止,我的解决方案(使用neo4j)是标签a b和c,标签为“FOO”,并制作了一个单独的图表,将FOO连接到BAR,ecc ..我是朝着正确的方向吗? 你知道一些更聪明的解决方案吗?
由于
[编辑:更正名称]
答案 0 :(得分:1)
你没有在你的图表中标记“J”,所以我会在这个答案中忽略它(和HELLO
,无论是什么)。
[EDITED]
您只需要每个子图的单个节点实例,并且它们都可以具有标签Subgraph
。我将在下面命名这些节点foo
,bar
和world
。
(foo:Subgraph {name: "Foo"})
(bar:Subgraph {name: "Bar"})
(world:Subgraph {name: "World"})
然后,您可以指出哪些节点是哪个子图的成员:
(foo)-[:MEMBER]->(a)
(foo)-[:MEMBER]->(b)
(foo)-[:MEMBER]->(c)
(bar)-[:MEMBER]->(x)
(bar)-[:MEMBER]->(y)
(bar)-[:MEMBER]->(z)
(world)-[:MEMBER]->(harry)
(world)-[:MEMBER]->(terry)
(world)-[:MEMBER]->(jerry)
您还可以拥有连接成员节点以及整个子图的关系:
(c)-[rel1]->(z)
(harry)-[rel2]->(bar)