任何时候我的音乐社区内有更新(歌曲评论,艺术家更新,新歌添加,yadda yadda yadda),我的"更新"表中会插入一个新行.该行包含艺术家ID以及其他信息(更改类型,时间和日期等).
我的用户有一个"最喜欢的艺术家"部分,他们可以做到这一点 - 标记艺术家作为他们的最爱.因此,我想创建一个新功能,向用户显示对各种喜爱的艺术家所做的更改.
我该如何有效地做到这一点?
SELECT *
FROM table_updates
WHERE artist_id = 1
OR artist_id = 500
OR artist_id = 60032
Run Code Online (Sandbox Code Playgroud)
请记住,用户可以将43,000名艺术家标记为收藏.
思考?
这取决于数据库的设置方式.如果我按照自己的方式行事,我会用这样的表格进行设置:
Table: user_favourite_artist
user_id | artist_id
---------------------
1 | 2
1 | 8
1 | 13
2 | 2
3 | 6
6 | 20
6 | 1
6 | 3
Run Code Online (Sandbox Code Playgroud)
user_id和artist_id一起是复合主键.每行按id指定用户(id)和他们作为收藏夹的艺术家.像这样的查询:
SELECT artist_id FROM user_favourite_artist WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
会给你artist_id的2,8和13.这是一个非常简单的查询,可以达到你的期望.
相反,当艺术家更新时,您将运行此查询:
SELECT user_id FROM user_favourite_artist WHERE artist_id = 2
Run Code Online (Sandbox Code Playgroud)
并且您将获得user_id的1和2.这将告诉您要通知哪些用户.此查询也很简单,并且可以扩展.