この質問はコアデータのコンテキストにありますが、私が間違っていなければ、より一般的なSQLの場合にも同様に当てはまります。
Core Dataを使用して順序付きテーブルを維持したいのですが、ユーザーは次のことができます。
- 行を並べ替える
- どこにでも新しい行を挿入します
- 既存の行を削除します
それを行うのに最適なデータモデルは何ですか?私は2つの方法を見ることができます:
position
1)配列としてモデル化する:エンティティにintプロパティを追加します
2)リンクリストとしてモデル化する:2つの1対1の関係を追加next
しprevious
、エンティティからそれ自体に追加します
1)並べ替えは簡単ですが、position
後に続くすべてのオブジェクトを更新する必要があるため、挿入または削除するのは面倒です。
2)挿入または削除は簡単ですが、並べ替えは非常に困難です。ORDER BY
実際、その場合のソート記述子(SQL句)の表現方法がわからないと思います。
今、私は1)のバリエーションを想像することができます:
3)intordering
プロパティをエンティティに追加しますが、1つずつカウントするのではなく、100 x 100をカウントします(たとえば)。次に、挿入は、前の既存のオブジェクトと次の既存のオブジェクトの順序の間の任意の数を見つけるのと同じくらい簡単です。高価な番号の付け直しは、100個の穴が埋められたときにのみ発生する必要があります。そのプロパティをintではなくfloatにすると、さらに良くなります。ほとんどの場合、2つのfloatの中間に新しいfloatを見つけることができます。
私は解決策3)で正しい方向に進んでいますか、それとももっと賢いものがありますか?