【发布时间】:2016-08-16 05:01:40
【问题描述】:
我是 Neo4j 的新手,正在尝试建立一个音乐数据库。首先,我只是在玩两个标签:
ArtistSong
显然这是一种父子关系,其中Song 是Artist(或可能是多个Artists)的子关系,可能类似于:
(:Artist {name:'name'})-[:RECORDED]->(:Song {title:'title'})
我做出以下假设:
- 艺术家的名字是独一无二的
- 歌曲标题不是唯一的
- 重复摄取数据是不可避免的
举一个我想做的例子:
- 我收录了 Leonard Cohen 的“哈利路亚”。创建了一个新的
Artist节点和Song节点,具有RECORDED关系 - 我收录了 Jeff Buckley 的“哈利路亚”。同样,新的
Artist和Song节点被创建,具有RECORDED关系。第一个“哈利路亚”Song根本与这个新图无关。 - 我再次收录了 Jeff Buckley 的“哈利路亚”。什么都没有发生。
- 我摄取了 Jeff Buckley 的“丁香酒”。我们重用了旧的
Artist节点,但我有一个新的Song节点与RECORDED关系
据我所知,使用MERGE 让我很接近,但不是很接近(它停止了ARTIST 的重复,但不是SONG 的重复)。如果我使用CREATE,则第 3 点无法正常工作。
我想我可以在SONG 标签中添加另一个属性来跟踪它的ARTIST(因此我可以使其独一无二),但这对于图形数据库来说似乎有点多余和单一,不是吗?
对于执行这些关系和要求的最简洁方式,有人有什么好主意吗?
【问题讨论】:
标签: neo4j