2016-07-13 10 views
0

たとえば、の場合を含む関係、「友人」は、通常のようにモデル化されるだろうさあ、言わせこの場合、単一の関係または2つの関係を使用する必要がありますか?</p>その後、として取得され <pre><code>(x:User)-[:FRIEND]->(y:User) </code></pre> <p>:ソーシャルネットワーキングプラットフォーム上

MATCH (x:User)-[:FRIEND]-(y:User) RETURN x, y 

xy:お互いに友人ではあるが、yは本当に信頼していない。x; xでもそうは感じませんy。だから、

は、yの観点から、データモデルは、実際にある:、したがって

(x)-[:FRIEND]->(y) 

何か:

(y)-[:FRIEND {untrusted: true}]->(x) 

しかし、xの観点から、それは物事がどのように見えるかではありませんこのような関係を作成することは明らかに不適切です:

MATCH (x:User {...}), (y:User {...}) MERGE (x)-[f:FRIEND]->(y) SET f.untrusted = true 

...今、物事はユーザーの両方の観点から、このように見える終わるので:

(x:User {...})-[:FRIEND {untrusted: true}]->(y:User) 
(x:User {...})<-[:FRIEND {untrusted: true}]-(y:User) 

一般的なアドバイスは、通常、ほとんどの場合、2つの個別の関係を予防することである、しかし、どのように私はおよそ行くべき関係のこのケースをモデリングしますか?

答えて

1

Neo4jのリレーションシップは常に指示されていますが、あなたが示すように、クエリの際に指示を必ずしも指定する必要はありません。

私はこの場合、ユーザーが他のユーザーに「フォロー」するTwitter型モデルと比較すると便利だと思います。ことには必ずしも往復運動をされていません。

(Will)-[:FOLLOWS]->(BarackObama) 

は、バラク・オバマはウィルの背中に従うことを意味するものではありません。

私はこれがあなたのデータモデルと一貫していると思います。この場合、双方向で関係を作成することに何も問題はありません。

関連する問題

 関連する問題