データベースにオブジェクトのコレクションがあります。フォトギャラリーの画像、カタログの製品、本の章など。各オブジェクトは行として表されます。これらの画像を任意に並べ替えてデータベースに保存し、オブジェクトを表示するときに正しい順序になるようにしたいと思います。
たとえば、私が本を書いていて、各章がオブジェクトであるとします。私は自分の本を書き、章を次の順序で並べます。
はじめに、アクセシビリティ、形態と機能、エラー、一貫性、結論、索引
それはエディターに送られ、次の推奨される順序で返されます。
はじめに、フォーム、機能、アクセシビリティ、一貫性、エラー、結論、インデックス
この順序を堅牢で効率的な方法でデータベースに保存するにはどうすればよいですか?
私は次のアイデアを持っていますが、それらのどれにもわくわくしていません。
配列。各行には注文IDがあり、注文が変更されると(削除とその後の挿入によって)、注文IDが更新されます。これにより、検索が簡単になります
ORDER BY
が、壊れやすいようです。// REMOVAL
UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
// INSERTION
UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
UPDATE ... SET orderID=insertionID WHERE ID=addedID
リンクリスト。各行には、順序付けの次の行のIDの列があります。
ORDER BY
ここではトラバーサルにコストがかかるようですが、私が考えていない方法で使用できる場合があります。スペース配列。orderingID(#1で使用)を大きく設定して、最初のオブジェクトが100、2番目のオブジェクトが200などになるようにします。次に、挿入が発生したら、それをに配置し
(objectBefore + objectAfter)/2
ます。もちろん、これは時々リバランスする必要があるので、物事が近すぎないようにします(フロートを使用しても、最終的に丸め誤差が発生します)。
これらのどれも私には特にエレガントに見えません。誰かがそれを行うためのより良い方法を持っていますか?