1

次のような単純な関係があるとします

CREATE (a:Company { name:"Apple" })-[:BUYS]->(b:Company { name:"Beats" })

ここで、関係に関するメタデータを収集したいと思います:BUYS-その関係を作成したユーザーと、これを確認するソースは何ですか。このために、新しいノードを作成し、他のノードをそれに接続します。

MATCH (a:Company { name:"Apple" }),(b:Company { name:"Beats" }) 
CREATE a-[:IS_BUYER]->(ab:Buyout { name:"Apple-Beats" })<-[:IS_SELLER]-b

MATCH (u:User { name:"Fred" }),(n1:Newspaper { name:"Washington Post" }),
   (n2:Newspaper { name:"Financial Times" }),(ab:Buyout { name:"Apple-Beats" }) 
CREATE u-[:CREATED]->ab<-[:CONFIRMED_BY]-n1,ab-[:CONFIRMED_BY]->n2

今、私はいくつかの質問があります:

  1. ほとんどの場合、クエリは:BUYS リレーションシップのみに関心があるため、そのままにしておくと、それらのクエリのパフォーマンスが向上しますよね?
  2. これをモデル化するための他のより良い方法はありますか?
  3. 具体化されたノードの名前/ID を生成する良い方法は何ですか?
  4. 関係の削除を:BUYS対応する:Buyoutノードにカスケードする方法はありますか?
4

1 に答える 1

0
  1. 必ず関係を維持できます:BUYS。ただし(company)-[:IS_BUYER]->()<-[:IS_SELLER]-(other)、要件に関してフォローが遅いかどうかを最初に確認する必要があります。時期尚早の最適化を行います。
  2. ドメイン内の別の「もの」からリレーションシップを参照する必要がある場合は、ノードとしてリファクタリングする必要があります。これは優れたモデリング アプローチです。
  3. ドメインの観点から意味がない場合は、中間ノードにプロパティを設定する必要はありません
  4. いいえ、Neo4j にはカスケード動作はありません。これは、アプリケーション レベルで実装する必要があります。
于 2014-06-18T17:05:01.517 に答える