Neo4jは作成時に関係方向を必要としますが、クエリ時にはこの方向を無視できます。このようにして、関係方向を無視してグラフを照会することができます。なぜneo4jは作成時に方向付けされた関係や双方向関係を許可しないのですか?
また、関係が自然に双方向であるか指示されていない場合の対処方法があります。like described here。
私の質問はなぜこのように実装されていますか?作成時に指示や双方向の関係を許さないのは正当な理由ですか?それはデータベースアーキテクチャの限界ですか?以下のような
サイファー文は許可されていません。
CREATE()-[:KNOWS]-()
CREATE()<-[:KNOWS]->()
私は答えのためにウェブを検索するが、私は多くを見つけることができませんでした。たとえば、this github issueです。
それがない方向に関係の方向を定義する必要があることは奇妙です。私のグラフの意味を傷つけているようです。
EDIT 1:
"セマンティック問題" についての私の立場を明確にするために(多分用語が間違っている):
が、私はこの単純なCREATE
ステートメントを実行するとします。
CREATE (a:Person {name:'a'})-[:KNOWS]->(b:Person {name:'b'})
私はこの非常に単純なグラフを持っています:
:KNOWS
の関係は、作成時にNeo4jに関係方向が必要なため、方向があります。私のドメインでa
はb
、b
はa
です。
今、新しいチームメンバーは、このサイファークエリで私のグラフを照会します:
MATCH path = (a:Person {name:'a'})-[:KNOWS]-(b:Person {name:'b'})
return path
この新しいチームメンバーが、私はこのグラフを作成したとき、私は:KNOWS
関係が向けられていないと考えていることを知りません。彼が表示されるという結果は同じです。
結果では、この新しいチームメンバーが考える唯一の人物が人物Bを知っていると考えることができます。それは私に悪いようです。あなたの為ではない?これは意味をなさない?
こんにちは@kuah!あなたの答えは、私が期待しているものに非常に近いです。私はこの本を読んでいて、近い将来にお勧めの章を読むでしょう!ありがとう! :) –