次のようなテーブル構造がある場合:
code, description, isdeleted
ここcode
で主キーはです。
ユーザーはレコードを作成し、後でそれを削除します。ソフト削除を使用しているため、isdeleted
はtrueに設定されます。次に、クエリでwhere句を使用してselectを実行しますand not isdeleted
これで、ユーザーが新しいレコードを作成しようとすると、コード「ABC」が存在しないことがわかり、再作成しようとした可能性があります。where句があるため、selectステートメントはそれを見つけられません。ただし、主キーインデックスエラーが発生します。
ユーザーがレコードを再利用できるようにする必要がありますか?ソフト削除のアイデアは、「削除された」レコードへの結合が引き続き機能するように、古いデータに対するクエリのレコードを保持することであるため、私はそうは思いません。ユーザーがコードの再利用を許可された場合、説明を変更して、履歴データの表示を変更する可能性があります。しかし、彼らがそのコードを使用するのを完全に止めるのは厳しすぎるのでしょうか?
または、完全に非表示の主キーを使用する必要があります。そうすれば、「コード」フィールドを再利用できますか?