我是Neo4j的新手,嘗試設置音樂數據庫來玩耍。從簡單開始,我只是有兩個標籤玩:如何在Neo4j中獲取或創建獨特的子節點
Artist
Song
顯然,這是一個父子關係,其中一個Song
是Artist
的孩子(或可能有多個Artist
S),並可能看起來像:
(:Artist {name:'name'})-[:RECORDED]->(:Song {title:'title'})
我在做後續荷蘭國際集團假設:
- 藝術家名稱是唯一
- 歌曲標題是不獨特
- 重複採集的數據是不可避免的
舉的想什麼,我做的一個例子:
- 我攝入倫納德科恩的「哈利路亞」。創建了一個新的
Artist
節點和Song
節點,其中RECORDED
關係 - 我通過Jeff Buckley攝入「Hallelujah」。再次,創建新的
Artist
和Song
節點,關係爲RECORDED
。第一個「哈利路亞」Song
根本沒有與這個新圖形關聯。 - 我再次通過Jeff Buckley攝取「哈利路亞」。什麼都沒發生。
- 我攝入Jeff Buckley的「丁香葡萄酒」。我們再用我們的老
Artist
節點,但我有一個RECORDED
關係
從我可以告訴一個新Song
節點,使用MERGE
讓我接近,但並不完全存在(它停止ARTIST
的重複,但不的SONG
)。如果我使用CREATE
,則點編號3.不能正常工作。
我想我可以添加另一個屬性到SONG
標籤跟蹤其ARTIST
(因此我可以做出獨特的),但這似乎有點冗餘和單一的圖形數據庫,不是?
有沒有人對執行這些關係和要求最簡潔的方式有任何明智的想法?
這確實工作,雖然現在已經看到了語法多麼複雜需要是實現這一目標,我傾向於只使用一個冗餘'artist'我可以寫'MERGE(a) - [:RECORDED] - >(s:Song {title:'Hallelujah',藝術家:'Leonard Cohen'})'(或者甚至是一起去掉'Artist'標籤?!) – Alec