2014-09-25 101 views
1

我正在構建坐落在圖形數據集上的應用程序,並且此圖形中的節點可以是其他較小的圖形,其中節點可以具有連接到主圖的節點。圖形 - Python - 存儲由圖形組成的圖形數據庫 - 圖形數據庫理論

A(嚴重拉伸,遺憾:d)ASCII技術來補償我(壞,對不起:d)英文:

   //  \\BAR 
       ||(x)---(y)|| 
       || /||\ 
       || (z) ||\\ 
       \\ | // \\ 
       //  |  \\_________ 
      //  |     \ 
      //  |    // \   \\ 
FOO  //  |    ||(harry)---(terry)|| 
//  \\   |    ||  / ||WORLD 
||(a)---(b)||  |   /|| (jerry)  || 
|| \  ||  |   // \\    // 
|| (c) ||  ///  \\/ 
\\ | //  /|| HELLO || 
     \___________/ \\  // 

節點x,y和z是條形圖,A,B的節點和FOO圖的c,對於harry ecc和WORLD圖也是如此。

FOO,BAR,WORLD和HELLO是主要大圖的節點。

在這個結構中,FOO的節點連接到BAR(c - > z)中的節點,這是棘手的部分),WORLD的節點連接到BAR(harry - > BAR)。

我知道如何在Python中使用Networkx來實現這個功能,但是我怎樣才能把它保存到數據庫?

我在想自己的解決方案,但我想知道是否有類似情況的理論或技術。

到目前爲止,我的解決方案(使用neo4j)標籤爲標籤「FOO」的b和c,並製作一個單獨的圖形,將FOO連接到BAR,ecc ..我的方向是否正確? 你知道一些更聰明的解決方案嗎?

感謝

:在這個答案[編輯更正名稱]

回答

1

你沒有你的圖中標註「J」,所以我會忽略它(和HELLO,不管它是什麼)。

將帖子

你只需要在每個子圖的節點實例,他們都可以有標籤Subgraph。我將在下面命名這些節點foobarworld

(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) 
+0

噢,抱歉我用HELLO改變了J,但不是在文本中...... - 通過這種解決方案,標籤不會變得多餘?我正在考慮將我的子圖節點標記爲「子圖」,這樣我只能查詢子圖之間的連接('MATCH(node1:Subgraph) - [:rel1] - >(node2:Subgraph)')..這是正確的嗎? – Hrabal 2014-09-25 17:37:11

+0

是的,你是對的。如果您仍然想要命名每個子圖,則可以在每個「子圖」實例中擁有一個「名稱」屬性。我會編輯我的答案。 – cybersam 2014-09-25 17:49:45