在数据库中存储“有序列表”的最佳方法是什么,以便轻松进行更新(添加,删除和更改条目的顺序)?

考虑一个数据库,其中有一个用户和电影表。每个用户都有一个喜欢的电影列表。

由于许多用户可以喜欢同一部电影,因此我将用户和电影划分为单独的表,并使用第三个表将它们连接起来,即用户电影。

usermovies包含用户的ID,电影和“订单号”。订单号用于为用户订购电影列表。

例如,用户Josh可能具有以下列表:

  • 普罗米修斯
  • 黑色3人
  • 独裁者

  • 并且用户Jack可能具有以下列表:
  • 独裁者
  • 普罗米修斯
  • 战舰
  • 《白雪公主与猎人》

  • 因此,它们共享一些收藏夹,但不一定以相同的顺序。

    我可以使用查询获取每个用户的电影ID列表:
    SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
    

    然后,使用订购的movie_id,可以使用另一个查询来获取电影列表
    SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
    

    这样查询就可以了,但是现在更新列表似乎真的很复杂-是否有更好的方法来存储此信息,以便轻松获取用户x的电影列表,添加电影,删除它们以及更改列表的顺序?

    最佳答案

    具有电影和用户之间关联属性的附加列的联结/链接表是实现具有关联类的多对多关联的标准方法-因此您所做的似乎是正确的。

    关于插入/更新/删除的简便性,每次执行插入/更新/删除时,您都必须管理整个关联(用户电影FK的所有行)。
    可能没有一种神奇/简单的方法可以做到这一点。

    话虽如此,您还需要在事务中运行这些操作,并且更重要的是,如果您的应用程序具有多用户功能,则在此联结表上具有“版本”列。

    关于mysql - 将有序列表存储在数据库中的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11008876/

    10-09 16:02