3

Sqlite データベース内のアイテムのテーブルからアイテムの順序付きリストを取得します。Sqlite データベース テーブル内の 2 つの項目の順序で ID を入れ替えるにはどうすればよいですか?

4

1 に答える 1

6

ID によって位置や順序が決定されるべきではありません。不変の識別子である必要があります。

データベースで順序を表す必要がある場合は、別の orderNumber 列を作成する必要があります。いくつかのオプションは、(1) 範囲にまたがる値を持つか、(2) 次へのポインターを持つ (リンクされたリストのように) です。

範囲の場合:範囲を広げると、挿入ポイントの後のすべてのアイテムの orderNumber 列を書き換えるのを避けるのに役立ちます。たとえば、範囲内で、最初に挿入すると 1 を取得し、2 番目を挿入すると最大範囲を取得し、最初と 2 番目の間に 3 番目を挿入すると中間範囲の番号を取得します。1 つの欠点は、リストに十分なチャーンが発生した場合 (大きなスパンによって最小化された場合)、範囲のバランスを取り直す必要がある場合があることです。このソリューションの長所は、SQL ステートメントのこの列で並べ替えるだけで、順序付きリストを取得できることです。

リンクされたリスト の場合: データベースに、その次の id を指す次の列が順番にある場合、何かを挿入するためにいくつかの行を更新する必要があります。利点は、それが単純であることです。欠点は、SQL ステートメントで注文できないことです。リストを取得してソートするコードに依存しています。

もう 1 つのバリエーションは、順序付けられたリスト データをそのテーブルから完全に引き出すことができるというものです。たとえば、listid、itemid、orderedNumber を持つ順序付きリスト テーブルを作成できます。これにより、参照するテーブル内のアイテムの 1 つまたは複数の論理的な順序付きリストを作成できます。

その他の参照:

頻繁に入れ替わる注文商品をDBに格納する方法

順序を維持しながら順序付きリストをデータベースに保存する最良の方法

https://dba.stackexchange.com/questions/5683/how-to-design-a-database-for-storing-a-sorted-list

于 2012-08-31T12:17:02.753 に答える