[英]Creating a relationship to a relationship in Neo4j
是否可以在 Neo4j 中創建與關系的關系?
用例是這樣的:
該圖最好看起來像這樣:
(:Question {name:"What movie?"})-[:Option]->(:Movie {name:"Movie1"})
^
|
[:Vote]
|
(:User)
我意識到我可以解決這個問題的一種方法是使用以下方法:
(:Question)-[:Option]->(:Movie)<-[:Vote]-(:User)
但是,如果我決定將來刪除Movie
作為Option
,我將無法利用DETACH
並且必須自己管理刪除Vote
關系。 更不用說,如果Movie
屬於多個類別,我必須跟蹤它屬於哪個Question->Movie
關系(可能帶有某種 ID)。 只是看起來很亂……
是否有可能建立與關系的關系? 或者我將不得不手動強制執行參照完整性?
是否有可能建立與關系的關系?
不,這是不可能的。 根據文檔:
一個關系連接兩個節點,並保證有一個有效的源節點和目標節點。
即:關系的起點和終點應該是一個節點。
我相信您應該對數據模型進行一些更改。 例如:
也許Option
可以是節點而不是關系。 更有意義,不是嗎? 這條路:
(:Category)-[:HAS]->(:Option)
此外, Vote
也可以是一個節點,而不是關系......這樣,當用戶進行(關系,啊?)投票時,該投票節點將引用選項及其相關的類別。
(:Category)-[:HAS]->(:Option)
\ /
[:FOR_CATEGORY][:FOR_OPTION]
\ /
(:Vote)
|
[:MAKES]
|
(:User)
例如,如果您需要刪除一個Option
以及與之相關的:Vote
,您可以執行以下操作:
MATCH (o:Option {id:10})<-[:FOR_OPTION]-(v:Vote)
DETACH DELETE o
DETACH DELETE v
有道理嗎? 對不起我的 ASCII 藝術。 :)
我正在調查這個。 我能找到的唯一合理的方法是為關系分配一個標識符( :HAS
在你的情況下),然后在指向關系中使用它( :VOTE
)。
Neo4j 對此有內部 ID(參見ID()
函數),但我通常更喜歡嘗試分配一個語義上有意義的 ID(例如一個人的國民保險號、頁面 URL 或在關系的情況下,其哈希碼)連接端點的標識符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.