Похоже, вы почти на самом деле.
Как уже упоминалось в моих комментариях по самому вопросу, вы захотите отказаться от создания индекса из своих сценариев (они должны применяться только один раз до вашего импорта, и вам следует рассмотреть возможность использования уникальных ограничений для полей 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)
, который соединяет: Ссылки узел для игроков, которые являются товарищами по команде, с: командой, в которую они играли, и ваш: узел Links удерживает годы, в которые они играли вместе. В этот момент вы можете удалить свойства linkID, toPlayerID, fromPlayerID и teamID из узла, так как в отношениях db графика отношения заменяют внешние ключи при переводе из реляционного db, и поскольку вы, вероятно, не будете искать: Ссылки узлы по идентификатору.
В качестве альтернативы (и в соответствии с вашей желаемой диаграммой) вы можете использовать информацию на узлах: Ссылки для создания связей между: Игроками напрямую. Вы можете установить атрибуты в отношениях для количества лет, проведенных вместе, и идентификатора (или имени) команды, в которую они играли. Имейте в виду, что сама связь не сможет указать на: узел Team, в котором игроки играли вместе, хотя вы должны иметь возможность использовать эту информацию для создания: PlayedOn отношений от: Players to: Team в вопросе.
Такое моделирование может выглядеть следующим образом:
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)
Имейте в виду сращивание: Teammate отношений может быть медленным. Если вы планируете запускать это только один раз, вы можете использовать CREATE вместо MERGE.
Для этого вам не нужно создавать индекс для каждого добавляемого вами узла. После создания индекса схемы он будет применяться к любому узлу, добавленному с этим ярлыком. Поэтому, если ваши индексы уже на месте, вы можете полностью удалить их из своего скрипта. Хотя я бы рекомендовал использовать уникальное ограничение вместо индекса, когда дело доходит до ваших идентификационных полей. Кроме того, вы не указали, что не так с вашим скриптом. Можете ли вы вставлять ошибки, которые вы пытаетесь запустить, или лучше описывать проблемы, с которыми вы сталкиваетесь? – InverseFalcon
Может быть, добавить репрезентативную схему того, как должна выглядеть результирующая структура? –
Не могли бы вы также немного рассказать о своих: Ссылки? Я могу понять, как связывать игрока с командой, но вы также указываете в той же строке ссылку от одного игрока к другому, не говоря уже о характере этих отношений. Что это за игровая ссылка для игрока? – InverseFalcon