2017-08-11 13 views
2

Neo4jで関係との関係を作成することは可能ですか?以下のようNeo4jで関係との関係を作成する

  • 私は、質問の束を持っている:

    ユースケースは、このような何かを行く「私たちはどのような映画を見なければなりません?」

  • 各質問には、「映画1」、「映画2」など多くのオプションがあります。
  • 質問ごとに、自分のお気に入りのオプションで投票できるようにします。

グラフは、好ましくは、このようなものになります。私は削除することを決定したならば、

(:Question)-[:Option]->(:Movie)<-[:Vote]-(:User) 

しかし:私はこれを解決できる一つの方法は、以下であることを認識

(:Question {name:"What movie?"})-[:Option]->(:Movie {name:"Movie1"}) 
            ^ 
            | 
            [:Vote] 
            | 
            (:User) 

MovieOptionとしていますが、DETACHを利用することはできません。自分でVoteの関係を削除する必要があります。言うまでもなく、Movieが複数のカテゴリに属している場合は、それが属している可能性がある(おそらく何らかのIDを使って)Question->Movieの関係を把握しておく必要があります。それはちょうど非常に乱雑に思われる...

関係に関係を作成することは可能ですか?あるいは、手動で参照整合性を強制する必要がありますか?

+0

実際の例を提供するために質問を編集できますか?カテゴリ/オプション/もの/投票スキーマをどのように解釈するのか正確にはわかりません。 –

+0

確かに、できます。 –

答えて

1

リレーションシップとの関係を作成することは可能ですか?

いいえ。これはできません。 the docsよれ:

関係は、2つのノードを接続し、有効な ソースとターゲットノードを持つことが保証されます。

つまり、関係の開始点と終了点はノードである必要があります。

私はあなたのデータモデルにいくつかの変更を加えるべきだと思います。たとえば、

おそらくOptionはノードであり、関係ではありません。もっと意味をなさないか?この方法:

(:Category)-[:HAS]->(:Option)  

また、Voteがあまりにノードではなく、ユーザー(?関係、安)の投票、この投票ノードがする作るの関係...この方法では、することができオプションとそれが相対的であるカテゴリを参照してください。

MATCH (o:Option {id:10})<-[:FOR_OPTION]-(v:Vote) 
DETACH DELETE o 
DETACH DELETE v 

がどんな意味を行います。たとえば、あなたがそれに関連するOption、その結果:Vote Sを削除する必要がある場合

(:Category)-[:HAS]->(:Option) 
      \   /
    [:FOR_CATEGORY][:FOR_OPTION] 
      \ /
      (:Vote) 
       | 
      [:MAKES] 
       | 
      (:User) 

次のような何かを行うことができますか?私のASCIIアートには申し訳ありません。 :)

+1

意味があり、ASCIIアートは私のものより優れています! :D –

+0

@JimHeising haha​​ありがとう! –

+1

カテゴリまたはオプションのいずれかが削除されても、あなたの例では投票ノードを削除する必要があるため、自分自身で参照整合性を管理する必要はありません。正しい?しかし、少なくともそれは参照IDの問題を乗り越えます。これは素晴らしい機能です。 –