Я новичок в Neo4j и поиграю, пытаясь создать музыкальную базу данных. Для начала просто, я просто играл с двумя метками:Как получить или создать уникальный дочерний узел в Neo4j
Artist
Song
Очевидно, что это родитель-потомок, где Song
является ребенок из Artist
(или возможно, несколько Artist
ы), и может выглядеть примерно так:
(:Artist {name:'name'})-[:RECORDED]->(:Song {title:'title'})
Я делающего последующие ИНГ предположение:
- имена художников являются уникальными
- песни названия не уникальных
- Дублирования данных употребляют являются неизбежным
Чтобы дать пример того, что я хотел бы сделать:
- Я глотаю «Аллилуйю» Леонарда Коэна. Созданы новый узел
Artist
иSong
, сRECORDED
отношениями - Я глотаю «Аллилуйя» Джеффа Бакли. Снова создаются новые
Artist
иSong
узел с отношениямиRECORDED
. Первый «Аллилуйя»Song
не связан с этим новым графиком вообще. - Я снова глотаю «Аллилуйю» Джеффа Бакли. Ничего не произошло.
- Я глотаю «Сиреневое вино» Джеффа Бакли. Мы повторно наш старый
Artist
узел, но у меня есть новыйSong
узел сRECORDED
отношений
Из того, что я могу сказать, используя MERGE
получает меня близко, но не совсем там (он останавливает дублирование ARTIST
, но не от SONG
). Если я использую CREATE
, то номер 3. не работает должным образом.
Я думаю, я мог бы добавить еще одно свойство к метке SONG
, которая отслеживает ее ARTIST
(и поэтому я могу сделать уникальный), но это кажется немного избыточным и унииоматичным из базы данных графа, нет?
Есть ли у кого-нибудь яркие идеи относительно наиболее лаконичного способа обеспечения соблюдения этих отношений и требований?
Это действительно работает, хотя и имеет в настоящее время рассматривается как сложный синтаксис должен быть для достижения этой цели, я склонен просто использовать избыточную 'artist' свойство на моей «Песне», чтобы я мог написать что-то вроде «MERGE (a) - [: RECORDED] -> (s: Song {название:« Hallelujah », исполнитель:« Leonard Cohen »})' (или, может быть, даже покончить с лейблом «Артист»?) – Alec