Neo4j:两个不同的同名关系

时间:2014-07-14 18:43:42

标签: graph neo4j

场景1:
型号:
User - [:关注] - > User
User - [:关注] - > Playlist


两个FOLLOW之间的User关系具有属性followerType,其表示用户如何关注其他用户,例如用户可以通过Twitter或谷歌加上关注其他用户。

FOLLOWUser之间的Playlist关系不应该包含任何followerType属性,因为这里没有任何意义。该关系简单地表示应该通知用户播放列表中的任何改变,例如添加歌曲,删除歌曲等。

问题:在这种情况下,我们是否应该为这两种关系提供不同的名称,以区别于其他关系,还是有其他方法可以解决这个问题?

<小时/> 情景2:
型号:
User - [:播放] - &gt; Song
User - [:播放] - &gt; Playlist

问题:在这种情况下,两个PLAYED关系代表相同的操作,但应用于两种不同类型的节点SongPlaylist。因此,将这两种关系视为相同或通过指定不同的名称来区别对待它们是个好主意,例如PLAYED_SONGPLAYED_PLAYLIST

1 个答案:

答案 0 :(得分:2)

取决于;)

如果你想在查询时区分差异,那么拥有不同类型的“更便宜”。例如:

match (:User)-[:PLAYED_SONG]->()

会比以下便宜:

match (:User)-[:PLAYED]->(:Song)

因为Neo4j只需要查看关系类型,而不是关系类型和节点标签。

如果您想同时拥有歌曲和播放列表:

match (:User)-[:PLAYED]->()

将比以下更容易理解:

match (:User)-[:PLAYED_SONG|PLAYED_PLAYLIST]->()

我的建议是选择FOLLOW和PLAYED作为类型。使用该设置进行一些性能测试。