我正試圖在Neo4j中實現一個數據模型。該模型在城市和街道上有興趣點。街道連接點。 最初我認爲點和街道都應該作爲節點在圖形數據庫中表示。 在這兩種不同類型的節點之間存在一種關係(「與...連接」)。 現在我想到的可能是,不是將街道表示爲節點,或許將街道表示爲關係更爲正確(「連接兩點」) 這實際上是我的問題。在模型中表示網絡(線路部分)的更正確方法是什麼?使用節點還是關係?如何在Neo4j中表示網絡的線路
0
A
回答
3
關係和節點之間唯一的主要區別是關係必須存在於兩個節點之間。這意味着如果您沒有存儲連接的兩個興趣點,則無法存儲特定的街道。所以,如果你看到這是一個問題,你可能想要將街道存儲爲節點。如果您確信只有在街道上存在您的數據庫中存在感興趣的點時纔會存儲街道,那麼將街道表示爲關係更有意義。
通常,您應該儘量避免將節點中的屬性存儲在僅用於查找它們之間關係的節點中。在這種情況下,您會提到可能的故事情節,即每個感興趣的節點中的「關聯點」屬性。這會起作用,但實際上只是說在兩個點之間存在關係而不實際使用關係。再一次,如果您希望能夠存儲不存在興趣點的街道,則可能需要這樣做,並且您可以存儲沒有興趣點的街道,方法是將「點與「屬性連接爲NULL,但我會建議反對這一點。
要思考的另一件事是你將存儲在關係中。如果使用街道爲節點的模型,則很難表示像感興趣點之間的距離之類的數量,而無需爲這些屬性特別添加關係,這可能也是街道關係的屬性。
UPDATE:以爲我會添加一個示例查詢來說明如何使街道關係可以簡化您的邏輯並使您的數據庫更簡單,更直觀。
想象一下,你想找到點的點A和B之間的利益最少的路徑
這是查詢將會是什麼樣的關係模型:
MATCH (a:Point {name: "foo"}), (b:Point {name: "bar"}),
p = shortestPath(a-[*:Street]-b)
RETURN p
利用關係在適當的情況下,您可以啓用Neo4j的功能,使您可以使用相對簡單的查詢完成大量工作。在將街道表示爲節點的模型中,很難想出一種將此查詢寫入的方法,但它很可能會更復雜且效率更低。
相關問題
- 1. 如何在OpenWrt + OVS路由器上設置無線網絡?
- 2. Neo4j在網絡上的實現
- 3. 區分來自網絡路線和API路線的呼叫?
- 4. 爲什麼我的網絡路線去api路線? laravel 5.4
- 5. Neo4j網絡管理員
- 6. FOSUserBundle的登錄表單的路線不從WampServer網絡地址
- 7. 的Android如何讓網絡/無線網絡連接的IP
- 8. 網絡圖表Javascript圖形庫中顯示的趨勢線
- 9. 在饋線網絡中找到最長的路徑
- 10. 當由api創建時,neo4j網絡瀏覽器中不顯示關係... neo4j 2.0.1
- 11. 如何確定網絡路徑是否可用(在線或離線)?
- 12. 網絡API路線返回404
- 13. 如何在neo4j中更改路徑
- 14. 如何在iPhone應用程序中顯示Wifi網絡列表?
- 15. 路線 - 如何顯示在網址ID和文章的名稱?
- 16. 如何使用jboss運營網絡監控駱駝路線?
- 17. 谷歌圖表(網絡)如何添加線性45度線
- 18. 網絡版:文字區在線表格
- 19. 如何在ShinobiCharts中顯示網格線
- 20. 在網絡瀏覽器中模擬gps位置路線
- 21. 社交網絡的Neo4j圖形模型
- 22. 如何從無線網絡列表中刪除「藍牙」(Android Gingerbread)
- 23. 如何在Rails中表示這條路線?
- 24. 如何獲得熱點網絡和顯示在Android的列表
- 25. 將點網絡的「路徑」連接到「路線」
- 26. 如何在Android中關閉wifi配置的無線網絡?
- 27. 在網絡上路由mvc
- 28. 如何在我的Graphql架構中表示Neo4j關係屬性?
- 29. 網絡在線監測