Jea*_*uys 7 database database-design core-data datamodel html-lists
这个问题是在核心数据的背景下,但如果我没有弄错,它同样适用于更一般的SQL案例.
我想使用Core Data维护一个有序的表,用户可以:
什么是最好的数据模型呢?我可以看到两种方式:
1)将其建模为数组:我position向我的实体添加一个int 属性
2)模型,可以作为一个链表:我补充两个一比一的关系,next并previous从我的实体本身
1)使排序变得容易,但插入或删除很痛苦,因为你必须更新之后的position所有对象
2)使插入或删除变得容易,但很难排序.实际上,我认为我不知道如何表达ORDER BY该案例的排序描述符(SQL 子句).
现在我可以想象1)的变化:
3)ordering向实体添加一个int 属性,但不是一个一个地计算,而是将它计为100乘100(例如).然后插入就像在前一个和下一个现有对象的排序之间找到任何数字一样简单.只需要填充100个孔,就必须进行昂贵的重新编号.使该属性成为浮点而不是int使得它变得更好:几乎总是可以在两个浮点之间找到一个新浮点.
我是否在解决方案3)的正确轨道上,还是有更聪明的东西?
如果顺序是任意的,即不是所建模的数据所固有的,那么您别无选择,只能添加属性或关系来维护顺序。
我建议使用链表,因为它最容易维护。我不确定链接列表难以排序是什么意思,因为无论如何您很可能不会按任意顺序进行排序。相反,您只需获取最顶层的实例并向下走。
按可整除的浮点属性排序是一个好主意。您只需从较高的现有索引中减去较低的现有索引,将结果除以二,然后将该结果添加到较低的索引中,即可创建近乎无限数量的中间索引。
如果您需要对表等进行排序,您还可以将可分索引与链接列表组合起来。链表可以让您轻松查找现有索引,而可分索引则可以让您在需要时轻松排序。
Core Data 抵制这种排序,因为它通常是不必要的。您不想向数据模型添加某些内容,除非有必要模拟模型描述的现实世界对象、事件或条件。通常,排序/排序不是模型固有的,而只是 UI/视图需要的。在这种情况下,您应该在模型和视图之间的控制器中具有排序逻辑。
当您可能不需要时,在向模型添加排序之前请仔细考虑。
从 iOS 5 开始,您可以(并且应该)使用NSOrderedSet及其可变子类。\xe2\x86\x92 OS X v10.7 和 iOS 5.0 的核心数据发行说明
\n\n请参阅如何在核心数据中保留有序列表中已接受的答案。
\n