在数据库中存储“有序列表”的最佳方式是什么,以便轻松完成更新(添加、删除和更改条目的顺序)?
考虑一个数据库,其中有一个用户和电影表。每个用户都有一个最喜欢的电影列表。
由于许多用户可以喜欢同一部电影,因此我将用户和电影制作为单独的表,并使用第三个表将它们连接起来,即 usermovies。
usermovies 包含用户的 id 和电影以及“订单号”。订单号用于为用户订购电影列表。
例如,用户 Josh 可能有以下列表:
- 普罗米修斯
- 黑衣人 3
- 独裁者
用户 Jack 可能有如下列表:
- 独裁者
- 普罗米修斯
- 战舰
- 白雪公主与猎人
因此,他们分享了一些最爱,但不一定以相同的顺序。
我可以使用查询获取每个用户的电影 ID 列表:
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
然后,使用有序的movie_ids,我可以使用另一个查询获取电影列表
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
所以查询工作,但现在更新列表似乎真的很复杂 - 有没有更好的方法来存储这些信息,以便轻松获取用户 x 的电影列表、添加电影、删除它们并更改列表的顺序?