6

データベース テーブルからデータを削除する 2 つの方法を知っています

  • 完全に削除します
  • isActive/isDeleted のようなフラグを使用する

isActive の問題は、レコードがアクティブかどうかを SQL クエリのあらゆる場所で追跡する必要があることです。ただし、DELETE を使用すると、データが永久に削除されます。

このデータをバックアップする最善の方法は何ですか?

データベースに複数のテーブルがあると仮定すると、すべてをバックアップして別のテーブルに保存するだけの共通関数が必要ですか (おそらく XML でしょうか?)、または他の方法があります。

私は MySQL を使用していますが、他の DB で使用されている手法にも興味があります。

4

7 に答える 7

13

テーブルを、非アクティブなアイテムを非表示にするビューに置き換えます。

または、行をアーカイブ テーブルにバックアップする DELETE のトリガーを記述します。

于 2009-11-23T17:49:16.407 に答える
2

isDeleted 列を使用して、条件 isDeleted=false で isDeleted 以外のすべての列を選択するビューを定義できます。次に、すべてのステップをビューでのみ機能させます。

于 2009-11-23T17:50:47.247 に答える
2

レコードの削除時に起動するトリガーを使用して、それらをある種の墓場テーブルにバックアップできます。

于 2009-11-23T17:50:07.623 に答える
1

データを削除しない最大の理由の1つは、リレーションに必要な場合があることです。たとえば、ユーザーがデータベースから古い顧客を削除することを決定した場合でも、古い請求書で参照されているため、顧客レコードが必要です(これははるかに長い寿命を持つ可能性があります)。

これに基づく最良の解決策は、多くの場合、ビューと組み合わせた「IsDeleted」タイプの列です(Quassnoiは、多くの非表示データが原因で発生する可能性のあるパフォーマンスの問題に役立つパーティション化について言及しています)。

于 2009-11-23T18:09:59.830 に答える
1

レコードとタイムスタンプをバックアップする履歴テーブルを維持できます

于 2009-11-23T17:51:20.290 に答える
0

SqlServer を使用していた場合は、トリガーを使用して、削除されたテーブルにレコードを移動できます。

于 2009-11-23T17:50:32.037 に答える
0

列でテーブルを分割しDELETED、条件を含むビューを定義できます。

… AND deleted = 0

これにより、アクティブなデータに対するクエリがシンプルかつ効率的になります。

于 2009-11-23T17:49:16.720 に答える