そのため、neo4j を調べました。そのデータ モデルが私のプロジェクトに非常によく適合する可能性があるため、今後のプロジェクトでそれを使用する可能性があります。ドキュメントに目を通しましたが、この質問に対する回答が必要です。
リレーションシップを一方向に設定できますか?
neo4jの人は映画が好きみたいなのでその続き。次のようなグラフがある場合:
Actor A -> [:Acts in] -> Movie B
ノードのタイプが異なるため、方向は明らかです。
でもホラー映画は好きなので…
Person A -> [:wants_to_kill] -> Person B
この関係は一方向である必要があるため、「A は誰を殺したいのか?」とクエリすると、「Person B は誰を殺したいですか?」とクエリすると、Person B が返されます。私は何も得ません。
双方向の関係が必要な場合もあります
お気に入り:
Person A <-[:has_met] -> Person B
...これは明らかです。
ドキュメンテーションは言う:
Relationships are equally well traversed in either direction. This means that there is
no need to add duplicate relationships in the opposite direction (with regard to
traversal or performance).
While relationships always have a direction, you can ignore the direction where it is
not useful in your application.
したがって、ドキュメントによると、デフォルトでは関係には方向性があり、必要に応じてそれを無視できます。
ここからが複雑になります。
次のグラフを検討してください (矢印に注意してください)。
Person A <- [:wants_to_kill] -> Person B
Person B -> [:wants_to_kill] -> Person C
Person C -> [:wants_to_kill] -> Person A
すべての道順を無視すると、[:wants_to_kill]
「A / C は誰を殺したいですか?」という誤った結果が返されます。どれを無視する必要があるかを知っていれば、クエリを実行しません。
それで、どうにかしてリレーションシップを双方向に設定することはできますか (それらを作成するとき)、またはこれを 2 つのリレーションシップ (人物 A と B の間) でモデル化する必要がありますか?