这个问题是在 Core Data 的上下文中,但如果我没记错的话,它同样适用于更一般的 SQL 案例。
我想使用 Core Data 维护一个有序表,用户可以:
- 重新排序行
- 在任何地方插入新行
- 删除任何现有行
最好的数据模型是什么?我可以看到两种方式:
1)将其建模为数组:我将一个 intposition
属性添加到我的实体
2)将其建模为链表:我添加两个一对一的关系,next
并previous
从我的实体到自身
1)使排序变得容易,但插入或删除很痛苦,因为您必须更新position
之后的所有对象
2)使插入或删除很容易,但很难排序。事实上,我认为我不知道如何ORDER BY
为这种情况表达排序描述符(SQL 子句)。
现在我可以想象1)的变化:
3) 向实体添加一个 intordering
属性,但不是让它一个一个计数,而是让它计数 100 乘 100(例如)。然后插入就像在前一个和下一个现有对象的顺序之间找到任何数字一样简单。只有当 100 个孔被填满时,才需要进行昂贵的重新编号。使该属性成为浮点数而不是 int 会使它变得更好:几乎总是可以在两个浮点数的中间找到一个新的浮点数。
我在解决方案 3) 的正确轨道上,还是有更聪明的方法?