我正在克隆并扩展Google Tasks应用程序。我希望能够存储行顺序。我在数据库中创建了一个名为rowNumber的字段。当用户在其他行的中间插入一行时,我必须在许多其他行中更新此字段以实现所需的输出。还有更好的方法吗?
BTW该应用程序是为Google AppEngine(Python)制作的。
答案 0 :(得分:4)
使rowNumber成为浮点数。当用户在行 x 和 y 之间插入时,新行获取rowNumber =(x.rowNumber + y.rowNumer)/ 2.
如果要移动一行,只需根据目标位置以相同方式更新其rowNumber。
新行获取rowNumber,例如。 MAX + 256。
编辑 Microsoft使用新的HierarchyId数据类型在SQL Server 2008中解决了这个问题。您可以根据需要在几乎之间插入两个项目 - 直到用完HierarchyId max size。
答案 1 :(得分:3)
一个选项可能是将行存储为链接列表,其中每行为下一行和上一行保留一个附加字段。这方面的优点是它需要在插入之后仅触摸另外两行。缺点是,(据我所知)AppEngine没有连接,因此一次查询多行将非常难看。