Sieht aus, als ob Sie fast da sind, eigentlich.
Wie in meinen Kommentaren zu der Frage selbst erwähnt, sollten Sie die Indexerstellung aus Ihren Skripts löschen (diese sollten nur einmal vor dem Import angewendet werden und Sie sollten eindeutige Einschränkungen für ID-Felder berücksichtigen).
Wie für Ihre: Links Knoten, ist Ihr Plan, sie nur zu verwenden, um Beziehungen zu erstellen, oder planen Sie, sie danach zu behalten?
Der Ansatz für die Führung: Verbindungen um als Zwischenknoten mit Beziehungen von Ihren: Verbindungen Knoten auf andere Elemente des Diagramms, könnte wie folgt aussehen:
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)
Das Ihre verbindet: Knoten Links zu den Spielern, die sind Teammitglieder, an das: Team, auf dem sie gespielt haben, und dein: Links-Knoten hält die Jahre zusammen, in denen sie zusammen gespielt haben. An diesem Punkt können Sie die Eigenschaften linkID, toPlayerID, playerID und teamID vom Knoten entfernen, da db-Beziehungen in einem Graph dazu tendieren, Fremdschlüssel beim Übersetzen aus einer relationalen Datenbank zu ersetzen, und weil Sie wahrscheinlich nicht nachschlagen werden: Verknüpfungen Knoten nach ID.
Alternativ (und nach Ihrem gewünschten Diagramm) können Sie die Informationen auf der: Links Knoten verwenden, um Beziehungen zwischen: Spielern direkt zu erstellen. Sie können Attribute für die Beziehungen für die Anzahl der Jahre, die zusammen gespielt werden, und die ID (oder den Namen) des Teams, auf dem sie gespielt haben, festlegen. Beachten Sie, dass die Beziehung selbst nicht auf den: Team-Knoten zeigen kann, auf dem die Spieler zusammen gespielt haben, obwohl Sie diese Informationen verwenden können, um Folgendes zu erstellen: SpieledOn-Beziehungen von: Spielern zu: dem in Frage kommenden Team.
Diese Art der Modellierung könnte wie folgt aussehen:
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)
Denken Sie daran, das Verschmelzen der: Teamkollege Beziehung langsam sein kann. Wenn Sie dies nur einmal ausführen möchten, können Sie CREATE anstelle von MERGE verwenden.
Zum einen müssen Sie keinen Index für jeden hinzugefügten Knoten erstellen. Sobald ein Schema-Index erstellt wurde, wird er auf alle Knoten angewendet, die mit diesem Label hinzugefügt wurden. Wenn Ihre Indizes bereits vorhanden sind, können Sie sie vollständig aus Ihrem Skript entfernen. Obwohl ich empfehlen würde, eine eindeutige Einschränkung anstelle eines Indexes zu verwenden, wenn es um Ihre ID-Felder geht. Außerdem haben Sie nicht angegeben, was mit Ihrem Skript nicht funktioniert. Können Sie die Fehler einfügen, die Sie versuchen, es auszuführen, oder beschreiben Sie besser die Probleme, denen Sie begegnen? – InverseFalcon
Vielleicht ein repräsentatives Diagramm hinzufügen, wie die resultierende Struktur aussehen soll? –
Können Sie uns auch etwas über Ihre: Links erklären? Ich kann verstehen, einen Spieler mit einem Team zu verbinden, aber Sie geben auch in der gleichen Zeile einen Link von einem Spieler zum anderen an, ohne die Art dieser Beziehung zu erwähnen. Was soll dieser Player zu Player Link darstellen? – InverseFalcon