这个问题是在核心数据的背景下,但如果我没有弄错,它同样适用于更一般的sql案例.
我想使用Core Data维护一个有序的表,用户可以:
>重新排序行
>在任何地方插入新行
>删除任何现有的行
什么是最好的数据模型呢?我可以看到两种方式:
1)将其建模为数组:我向我的实体添加一个int position属性
2)将其建模为链表:我从我的实体到自身添加两个一对一的关系,next和prevIoUs
1)使分类变得容易,但插入或删除很痛苦,因为你必须更新后来的所有对象的位置
2)易于插入或删除,但很难排序.实际上,我认为我不知道如何表达该案例的排序描述符(sql ORDER BY子句).
现在我可以想象一下1)的变化:
3)向实体添加一个int排序属性,但不是一个一个地计数,而是将它计为100乘100(例如).然后插入就像在前一个和下一个现有对象的排序之间找到任何数字一样简单.只需要填充100个孔,就必须进行昂贵的重新编号.使该属性成为浮点而不是int使得它变得更好:几乎总是可以在两个浮点之间找到一个新的浮点数.
我是否在解决方案3)的正确轨道上,还是有更聪明的东西?
解决方法
从iOS 5开始,您可以(并且应该)使用
NSOrderedSet及其可变子类. →
Core Data Release Notes for OS X v10.7 and iOS 5.0