2016-11-28 8 views
0

用のテーブルとの関係を設定する:は私がのNeo4jに非常に新しいですリンク

私は、データを視覚化し、anayliseするMySQLのデータを移動していますが、私は関係を設定することはできません。

は、これまでのところ、私のビルドスクリプトは次のようになります。

// Create Players 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:player.csv" AS row 
CREATE (:Player { playerID: row.id, name: row.Name }); 
CREATE INDEX ON :Player(name); 
CREATE INDEX ON :Player(playerID); 

// Create Team 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:team.csv" AS row 
CREATE (:Team { teamID: row.id }); 
CREATE INDEX ON :Team(teamID); 

// Create PlayerLinks 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:playerlinks.csv" AS row 
CREATE (:Links { linkID: row.id, fromPlayerID: row.fromPlayerID, toPlayerId: row.toPlayerId, teamID: row.teamID, years: row.years }); 


MATCH (p:Player),(t:Team), (l:Links) 
WHERE l.fromPlayerID = p.playerID 
AND  l.toPlayerId = p.playerID 
AND  l.teamID = t.teamID 
CREATE 

テーブルplayerlinksは私が

を作成したいの関係が含まれていますここで私は達成することを目指しています何の図です: Players

+1

追加するノードごとにインデックスを作成する必要はありません。スキーマインデックスが作成されると、そのラベルが追加されたノードに適用されます。インデックスがすでに配置されている場合は、スクリプトから完全に削除することができます。あなたのIDフィールドについては、インデックスではなくユニークな制約を使用することをお勧めします。また、スクリプトで何がうまくいかないかを指定していない。あなたはそれを実行しようとしているエラーに貼り付けることができますか、またはあなたが苦しんでいる問題を詳しく説明できますか? – InverseFalcon

+1

結果の構造がどのように見えるかの代表的な図を追加することがありますか? –

+0

あなたは少しでもあなたについて説明できますか?リンク?プレーヤーとチームのリンクを理解することはできますが、この関係の性質について言及することなく、同じ行にあるプレーヤーから別のプレイヤーへのリンクを指定することもできます。このプレイヤーは何を代表するプレイヤーリンクですか? – InverseFalcon

答えて

1

あなたはほとんどそこにいるようです。

質問そのものに関する私のコメントで述べたように、スクリプトからインデックス作成を削除する必要があります(インポートする前に一度だけ適用する必要があります。また、IDフィールドに一意の制約を使用することを検討する必要があります)。

リンクノードは、それらを使用してリレーションシップを作成する予定ですか、それとも後でそれらを保持する予定ですか?

維持するためのアプローチ:周りのあなたの関係を持つ中間ノードとしてリンク:あなたのグラフの他の要素へのリンクノードは、次のようになります。誰がプレイヤーにリンクノード:

MATCH (l:Links) 
WITH l 
MATCH (p1:Player), (p2:Player), (t:Team) 
WHERE l.fromPlayerID = p1.playerID 
AND  l.toPlayerId = p2.playerID 
AND  l.teamID = t.teamID 
MERGE (l)-[:Teammate]->(p1) 
MERGE (l)-[:Teammate]->(p2) 
MERGE (l)-[:PlayedOn]->(t) 

あなたを接続しますチームメイト、チーム:プレイしたチーム、あなた:リンクノードは、一緒にプレーした年を保持します。この時点で、ノード内のlinkID、toPlayerID、fromPlayerID、およびteamIDの各プロパティをノードから削除することができます。グラフでは、リレーショナルデータベースからの変換時にDB関係が外部キーを置き換える傾向があり、ノードをIDで指定します。

また、希望の図に基づいて、次の情報を使用することもできます。ノードをリンクすると、プレイヤーは直接関係を作成できます。リレーションシップの属性は、一緒に演奏された年数と演奏したチームのID(または名前)を設定できます。関係自体は、プレイヤーが一緒にプレイしたチームノードを指すことはできませんが、プレイヤーとプレイヤーとの関係を作成するには、その情報を使用する必要があります。

モデリングのそのようなものは次のようになります。

MATCH (l:Links) 
WITH l 
MATCH (p1:Player), (p2:Player), (t:Team) 
WHERE l.fromPlayerID = p1.playerID 
AND  l.toPlayerId = p2.playerID 
AND  l.teamID = t.teamID 
MERGE (p1)-[:Teammate{years: l.years, team: t.teamID}]->(p2) 
MERGE (p1)-[:PlayedOn]->(t) 
MERGE (p2)-[:PlayedOn]->(t) 

は心の中でのマージをしてください:味方関係が遅くなることがあります。これを1回だけ実行する予定がある場合は、MERGEではなくCREATEを使用できます。

+0

助けてくれてありがとう、私はそれとして私が目指しているもののように見えます。 しかし、私がそれを実行するとエラーはありませんが、関係は作成されません(私はブラウザで見ることができません)。 –

+0

作成クエリの結果としてそれらは表示されませんが、関係が作成されたというフィードバックを参照する必要があります。チームメイトのプレーヤーを照会するには、次のクエリを試してください: 'MATCH(p1:Player) - [r:Teammate] - >(p2:Player)RETURN p1、r、p2' – InverseFalcon

+0

フィードバックはそのようなものではなく、 、私はノードがすべて作成されていることがわかります。 MATCH(N:リンク) しかし、 –

関連する問題