场景1:
的型号:
User
- [:关注] - > User
User
- [:关注] - > Playlist
两个FOLLOW
之间的User
关系具有属性followerType
,其表示用户如何关注其他用户,例如用户可以通过Twitter或谷歌加上关注其他用户。
FOLLOW
和User
之间的Playlist
关系不应该包含任何followerType
属性,因为这里没有任何意义。该关系简单地表示应该通知用户播放列表中的任何改变,例如添加歌曲,删除歌曲等。
问题:在这种情况下,我们是否应该为这两种关系提供不同的名称,以区别于其他关系,还是有其他方法可以解决这个问题?
<小时/> 情景2:
User
- [:播放] - &gt; Song
User
- [:播放] - &gt; Playlist
问题:在这种情况下,两个PLAYED
关系代表相同的操作,但应用于两种不同类型的节点Song
和Playlist
。因此,将这两种关系视为相同或通过指定不同的名称来区别对待它们是个好主意,例如PLAYED_SONG
和PLAYED_PLAYLIST
?
答案 0 :(得分:2)
取决于;)
如果你想在查询时区分差异,那么拥有不同类型的“更便宜”。例如:
match (:User)-[:PLAYED_SONG]->()
会比以下便宜:
match (:User)-[:PLAYED]->(:Song)
因为Neo4j只需要查看关系类型,而不是关系类型和节点标签。
如果您想同时拥有歌曲和播放列表:
match (:User)-[:PLAYED]->()
将比以下更容易理解:
match (:User)-[:PLAYED_SONG|PLAYED_PLAYLIST]->()
我的建议是选择FOLLOW和PLAYED作为类型。使用该设置进行一些性能测试。