想象一个具有两个表,一个列表(具有id和name的列表)和一个项目(具有id,list_id,这是一个链接到list.id和name的外键的数据库)以及具有ORM和相应模型的应用程序的数据库。
一项任务:在应用程序中有一种方法可以创建/编辑/查看列表及其中的项目(应该很简单),而且还可以将项目的顺序保存在一个列表中,并允许对其中的项目进行重新排序一个列表(因此,用户创建项目列表,然后交换两个项目,然后在显示列表时,应保留项目顺序)或删除项目。
在数据库方面实现它的最佳方法是什么?我应该使用哪种数据库结构?
我看到了解决这些问题的方法:
position
字段,并添加了一种管理API中位置的方法-可以起作用,但是它相当复杂(例如,处理某些项目的位置相同的情况,处理交换项目,处理项目删除,并且必须减少所有已删除项目之后的所有项目的位置,等等。]有没有简单的实现方法?像一些大公司在生产中使用的那种?我真的很好奇在现实生活中如何处理此类案件。
这是理论上的问题,因此这里没有代码示例(db结构除外)。>>
想象一个具有两个表,一个列表(具有ID和名称)和一个项目(具有ID,list_id,这是一个链接到list.id和名称的外键的数据库)以及具有ORM和相应应用程序的应用程序的数据库。 >
这是一个很好的问题,据我所知,没有简单的答案。我曾经想出一个针对大容量照片共享站点的解决方案,使用了您所描述的item
表,其中包含list_id
和position
列。性能的关键在于最大程度地减少了重新编号,因为该数据库拥有数百万张照片(超过2 ^ 32个赞)。
唯一的操作是将单个项目移动到列表中的另一个点(在列表中另一个项目之前或之后)。首先通过较大的步骤分配职位,例如1000、2000、3000。无论何时在其他两个项目之间移动项目,均会使用平均值,例如从pos = 3000移动到1500。最终,您可以尝试在具有连续位置编号的两个项目之间移动一个项目。然后,您可以根据需要较少更新的方式(例如,如果有连续的职位),选择在上方或下方重新编号项目。记得我在MySQL 5.7上使用RANK
和@vars
完成。