3

次のようなテーブル構造がある場合:

code, description, isdeleted

ここcodeで主キーはです。

ユーザーはレコードを作成し、後でそれを削除します。ソフト削除を使用しているため、isdeletedはtrueに設定されます。次に、クエリでwhere句を使用してselectを実行しますand not isdeleted

これで、ユーザーが新しいレコードを作成しようとすると、コード「ABC」が存在しないことがわかり、再作成しようとした可能性があります。where句があるため、selectステートメントはそれを見つけられません。ただし、主キーインデックスエラーが発生します。

ユーザーがレコードを再利用できるようにする必要がありますか?ソフト削除のアイデアは、「削除された」レコードへの結合が引き続き機能するように、古いデータに対するクエリのレコードを保持することであるため、私はそうは思いません。ユーザーがコードの再利用を許可された場合、説明を変更して、履歴データの表示を変更する可能性があります。しかし、彼らがそのコードを使用するのを完全に止めるのは厳しすぎるのでしょうか?

または、完全に非表示の主キーを使用する必要があります。そうすれば、「コード」フィールドを再利用できますか?

4

5 に答える 5

3

多くの人がデータは自然である必要があると主張していることを知っていますが、常に前のレコードを再利用する意図なしにソフト削除をサポートする場合は、データとは完全に別の主キーを使用する必要があります。この状況が発生します。

離婚した主キーを使用すると、同じ「コード」値を持つ複数のレコードを作成でき、他の何かを上書きすることを心配せずに、値を「元に戻す」ことができます(そうでない場合は、なぜソフト削除を行う必要がありますか?)。

個人的には、数値の自動インクリメントスタイルのIDが好きですが、GUIDの支持者はたくさんいます。

于 2008-09-16T07:44:51.167 に答える
2

または、完全に非表示の主キーを使用する必要があります。そうすれば、「コード」フィールドを再利用できますか?

あなたはこれにかなりよく答えたと思います。ユーザーが削除されたコードを再利用できるようにする場合は、ユーザーに表示されない別の主キーを用意する必要があります。コードが一意であることが重要な場合、ユーザーは通常、コードを入力しないでください。

于 2008-09-16T07:45:10.370 に答える
1

あなたが話している特定のデータに依存すると思います。

ユーザーがコード「ABC」を再作成しようとしている場合、前回使用されていたのと同じ「ABC」で、現在は廃止されたものですか、それともまったく異なる「ABC」ですか?

それが実際に同じ現実世界の「もの」を参照している場合は、単純に「削除を取り消す」ことに害はないかもしれません。結局のところ、同じものなので、論理的に言えば、過去のクエリと新しいクエリで同じものとして表示されるはずです。ユーザーが必要がなくなったと判断した場合は、削除することができます。将来のある時点で再び必要になった場合は、再度追加することで効果的に削除を取り消すことができます。

ただし、新しい「ABC」が古い「ABC」とは異なる (現実世界の) 何かを参照している場合、「コード」は実際には主キーではないと主張できます。あなたのデータは他の自然な選択肢を提供しません.任意のキーを作成することもできます.

これの大きな欠点は、もちろん、ユーザーが同じ「コード」で 2 つのアクティブなレコードを作成できないように、かなり注意する必要があることです。

于 2008-09-16T07:55:17.257 に答える
0

レコード(ソフト削除を除く)を選択してユーザーインターフェイス/出力ファイルに表示する場合は、isdeletedでない場所を使用します。

ただし、ユーザーが挿入操作を要求した場合は、2つのクエリを実行します。

  1. すべてのレコードを検索します(isdeleted値を無視します)。

  2. 最初のクエリ結果に基づいて、存在する場合はUPDATEを実行し(isdeletedフラグを逆にします)、存在しない場合はtrueINSERTを実行します。

ビジネスロジックのニュアンスはあなた次第です。

于 2008-09-16T08:00:17.107 に答える
0

これは、電子メールが一意の制約であるユーザーテーブルを使用して行いました。誰かがそこでアカウントをキャンセルした場合でも、参照整合性のためにその情報が必要なので、私が設定する内容はtrueに設定され、電子メールフィールドに「_deleted」を追加します。このように、ユーザーが将来再度サインアップすることを決定した場合でも、ユーザーにとって問題はなく、固有の制約が破られることはありません。

状況によってはソフト削除が良いと思います。たとえば、誰かがこのサイトからアカウントを削除し、ユーザーを削除すると、すべての投稿と回答が失われます。ソフト削除して、ユーザーを「削除されたユーザー」などとして表示する方がはるかに良いと思います...ああ、離婚した主キーも信じています

于 2008-09-16T08:02:51.093 に答える