簡體   English   中英

在 Neo4j 中創建與關系的關系

[英]Creating a relationship to a relationship in Neo4j

是否可以在 Neo4j 中創建與關系的關系?

用例是這樣的:

  • 我有很多問題,比如“我們應該看什么電影?”
  • 每個問題都可以有多個選項,例如“電影 1”、“電影 2”等。
  • 對於每個問題,我都希望用戶能夠為他們最喜歡的選項投票。

該圖最好看起來像這樣:

(: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM