2011-07-08 1 views
0

ここにデータ構造があります。それは単純ですが、キャッチがあります。IDのシーケンシャルを維持するために、キー値データスタックを元の状態に戻す方法を教えてください。

INT id, TEXT subject, TEXT response 

基本的に、単純なデータエントリが入力されます。ただし、削除をサポートする必要があります。キャッチは、ID番号は常に逐次でなければならないということです。たとえば1〜100は、5〜13が削除されたため、1-4,6-12,14〜100のようにスキップしません。

私が求めているのは基本的にはIDのシーケンシャルを維持するために、キー値のデータスタックを元に戻す方法を教えてください。

+2

なぜ順次IDが要件ですか? – Flimzy

+0

IDは変更できますか?もしそうなら多分IDはあなたのデータ構造体の一部ではなく、代わりにあなたが現在IDを使っているもののためにrow_number()を使うべきです。 – gordy

答えて

0

これが実際に要件であった場合(それについては何か不快なにおいがする)、私はおそらくON DELETEトリガーでそれを達成するでしょう。このトリガで

削除が発生するたびに、私はすぐに表に現在MAX(ID)に対応する行を取り出すことになる、とMAX(ID)行のIDの設定よりも大きい場合削除されたばかりの行のIDと一致するように、既存の行IDの更新を行います。

* max(id)が削除した行のIDより大きいかどうかを確認する理由は、最大行を削除したばかりの場合に更新を行わないようにするためです。

ここで、sqliteがトリガーをサポートするかどうかはわかりません。そうでなければ、クライアントコードにこの同じロジックを実装する必要があります。

もちろん、あなたのIDが激しく変動することを意味します...ほとんどのアプリケーションでは、非順次IDを持つよりはるかに問題があります。だから私はまだあなたがなぜ連続したIDが必要だと思っているのか疑問に思っています。

関連する問題