How to maintain an ordered table with Core Data (or SQL) with insertions/deletions?
Posted
by
Jean-Denis Muys
on Stack Overflow
See other posts from Stack Overflow
or by Jean-Denis Muys
Published on 2010-09-05T01:10:55Z
Indexed on
2012/09/21
9:38 UTC
Read the original article
Hit count: 267
This question is in the context of Core Data, but if I am not mistaken, it applies equally well to a more general SQL case.
I want to maintain an ordered table using Core Data, with the possibility for the user to:
- reorder rows
- insert new lines anywhere
- delete any existing line
What's the best data model to do that? I can see two ways:
1) Model it as an array: I add an int position
property to my entity
2) Model it as a linked list: I add two one-to-one relations, next
and previous
from my entity to itself
1) makes it easy to sort, but painful to insert or delete as you then have to update the position
of all objects that come after
2) makes it easy to insert or delete, but very difficult to sort. In fact, I don't think I know how to express a Sort Descriptor (SQL ORDER BY
clause) for that case.
Now I can imagine a variation on 1):
3) add an int ordering
property to the entity, but instead of having it count one-by-one, have it count 100 by 100 (for example). Then inserting is as simple as finding any number between the ordering of the previous and next existing objects. The expensive renumbering only has to occur when the 100 holes have been filled. Making that property a float rather than an int makes it even better: it's almost always possible to find a new float midway between two floats.
Am I on the right track with solution 3), or is there something smarter?
© Stack Overflow or respective owner