2009-11-23 15 views
6

は私がデータベースからの削除方法

  • はのisActiveのように永遠に
  • 使用して、フラグをそれを削除し、データベースのテーブルからデータを削除するには、2つの方法を知っている/ isDeleted

今のisActiveとの問題は、私が追跡しなければならないということです私のSQLクエリのどこにでもレコードがアクティブであるかどうかが問われます。ただし、DELETEを使用するとデータが永久に削除されます。

このデータをバックアップするにはどうすればよいでしょうか?

データベースに複数のテーブルがあると仮定すると、すべてをバックアップして別のテーブル(おそらくXML?)に格納する共通の機能が必要ですか、それとも他の方法もあります。

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

+2

あなたが使用しているDBソフトウェアを教えてくれれば、人々はあなたにコードスニペットを与えるのに十分なのかもしれません:) – tloach

+0

MySQLの使用。みんな他人じゃない? :P – Abhinav

答えて

13

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

または、行をアーカイブ表にバックアップするDELETEにトリガーを書き込みます。

0

あなたはDELETED欄にあなたのテーブルを分割し、条件が含まれるビューを定義することができます。

… AND deleted = 0 

これは、同じように簡単かつ効率的なアクティブ・データ上でクエリを作成します。

+0

abhinavは行を削除しようとしています...それは水平分割である必要があります。 – reinierpost

+0

ビューを分割して使用すると( 'SQL Server'と' Oracle'の中で)、行がテーブルから物理的に削除されたかのようにクエリが正確に動作します。また、削除された(または集約された)データを処理するためには、テーブルに対して簡単なクエリを書くことはできません。 – Quassnoi

2

レコードを削除するときにトリガーを使用して、何らかの種類の墓地のテーブルにバックアップすることができます。

0

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

+1

SQL Serverはトリガー機能を持つ唯一のデータベースではありませんが、AbhinavがトリガーをサポートするRDBMSを使用しているかどうかを知るのに役立ちます。他にも、MySQL、Oracle、Progress OpenEdgeなどが考えられます。 – ssakl

+0

私はMySQL 4.1.25を持っています。これはうまくいくのだろうか? – Abhinav

+0

そのバージョンにトリガーがある場合は、それが有効になります。すみません、私はSQL Serverを使用しているので、使用しているバージョンについてはわかりません。 –

2

isDeleted列を使用して、isDeleted以外のすべての列を条件isDeleted = falseで選択するビューを定義できます。それから、すべての牡蠣を景観だけで働かせてください。あなたは履歴テーブルを維持することができ

1

、あなたのバックレコードアップやタイムスタンプ

1

データを削除ないの最大の理由の一つは、それが関係するために必要なことである - 例えば、ユーザ古い顧客をデータベースから削除することを決定するかもしれませんが、古い請求書(それははるかに長い寿命を有するかもしれません)によって参照されるので、依然として顧客レコードが必要です。

これに基づいて、最良の解決策は、多くの場合、ビューと組み合わせた「IsDeleted」タイプの列です(Quassnoiはパーティション化について言及していますが、多くの不可視データによってポップアップする可能性があります)。

関連する問題