我有一個關於在圖形數據庫中建模的一般問題,我似乎無法將我的頭圍繞。如何在圖形數據庫中建立真實世界的關係(如Neo4j)?
你如何塑造這種類型的關係:「牛頓發明微積分」?
在simple graph,你可以喜歡這個型號:
Newton (node) -> invented (relationship) -> Calculus (node)
...所以你有一堆,你增加了更多的人,發明的「發明」曲線關係。
的問題是,你開始需要一堆屬性添加到關係:
- invention_date
- influential_concepts
- influential_people
- books_inventor_wrote
...和您需要開始在這些屬性和其他節點之間創建關係,如:
- influential_people:對人的關係節點
- books_inventor_wrote:關係到預定節點
所以現在看起來像「真實世界的關係」(「發明」)實際上應該是一個節點圖形,圖形應該是這樣的:
Newton (node) -> (relationship) -> Invention of Calculus (node) -> (relationship) -> Calculus (node)
而對於複雜的事情更多,其他人也參加微積分的發明,使圖表現在變成這樣的:
Newton (node) ->
(relationship) ->
Newton's Calculus Invention (node) ->
(relationship) ->
Invention of Calculus (node) ->
(relationship) ->
Calculus (node)
Leibniz (node) ->
(relationship) ->
Leibniz's Calculus Invention (node) ->
(relationship) ->
Invention of Calculus (node) ->
(relationship) ->
Calculus (node)
所以我問這個問題,因爲它看起來像你不想實際的圖形數據庫上設置屬性「的關係」對象,因爲你可能想在某個點將它們視爲圖中的節點。
這是正確的嗎?
我一直在研究Freebase Metaweb Architecture,他們似乎把所有東西當作一個節點。例如,Freebase的想法是Mediator/CVT,您可以在其中創建一個將「Actor」節點鏈接到「Film」節點的「Performance」節點,如下所示:http://www.freebase.com/edit/topic/en/the_last_samurai。不太確定這是否是同一個問題。
你有什麼指導原則可以用來確定「現實世界關係」是否應該實際上是一個圖節點而不是一個圖關係?
如果有關於這個話題的好書,我很想知道。謝謝!
優秀的答案!這真的爲我清除了一切,謝謝。 –