1

Silverlight アプリケーションに CRUD を実装していますが、従来の方法で削除機能を実装したくありません。代わりに、データをデータベース内に非表示に設定したいと考えています。

SQL Server データベースでこれを行う方法を知っている人はいますか?

大変助かります。

4

6 に答える 6

9

値が 0 または 1 の「deleted」テーブルに別の列を追加し、deleted = 0 のレコードのみを表示できます。

ALTER TABLE TheTable ADD COLUMN deleted BIT NOT NULL DEFAULT 0

削除されていない行のみを取得するビューを作成することもできます。

CREATE VIEW undeleted AS SELECT * FROM TheTable WHERE deleted = 0

コマンドを削除すると、次のようになります。

UPDATE TheTable SET deleted = 1 WHERE id = ...
于 2009-09-09T16:09:31.833 に答える
2

ほとんどの場合、削除トリガーを使用して、削除された行をアーカイブ テーブルにアーカイブします。このようにして、誰が各行を削除したかを把握することもでき、削除された行がパフォーマンスに影響を与えることはありません。削除されたテーブルを含める場合は、両方のテーブルを結合するビューを作成できます。

于 2009-09-09T18:42:14.370 に答える
0

トリガーを使用したソリューション

DB トリガーに詳しい方は、次のことを検討してください。

  • DeletedAt and DeletedByテーブルに列を追加する
  • 各テーブルのビューを作成します(例:テーブルCustomerにはCustomerViewビューがあり、DeletedAtnullでない行を除外します(日付列を持つgbnのアイデア)
  • すべての CRUD 操作は通常どおり実行されますが、Customerテーブルではなく、CustomerView
  • INSTEAD OF DELETE行を物理的に削除するのではなく、行を削除としてマークするトリガーを 追加します。
    • 論理 参照整合性を維持するために、この行へのすべての FK 参照も「論理的に」削除されるようにするなど、もう少し複雑なことを行うことができます。

このパターンを使用することを選択した場合、クライアント コードをわかりやすくするために、おそらくテーブルTCustomer,とビューのように異なる名前を付けるでしょう。Customer

于 2009-09-09T19:50:38.303 に答える
0

Lukasz Lysik が示唆するように行うことができ、「削除された」行のフラグとして機能するフィールドを作成し、表示したくないときにそれらを除外できます。私は多くのアプリケーションでそれを使用しました。

別の提案として、既存のステータス コードがある場合は、追加のステータス割り当てを追加することもできます。たとえば、私たちが内部的に使用するクラス出席アプリでは、出席レコードは「インポート済み」、「登録済み」、「完了済み」、「未完了」などです* - 意図しない重複がある場合に備えて、「削除済み」オプションを追加しました. そうすれば、問題に新たなコラムを投げかけるだけでなく、記録を残すことができます。

※裏で使う数字コードの表示名です。明確にするだけです。:)

于 2009-09-09T16:14:30.670 に答える
-1

論理的な削除は参照整合性を壊し、カスタム ロジックを使用してエンティティの整合性を強化する必要があるため、この種の実装には注意してください。

于 2009-09-09T16:12:07.837 に答える