2012-02-28 9 views
0

問題の詳細。 InnoDBテーブルがあるとします。このテーブルにはいくつかのレコードが含まれています。 私の質問は:どのように "削除"操作を実装し、操作ログのいくつかの形式を念頭に置いていますか?MySQLをテーブルから削除するか、テーブルの更新テーブルの列を削除済みとしてマークしますか?

  1. 削除操作にはDELETE FROM table_x WHERE...を使用する必要がありますので、「削除」を引用しました。これは、外部キーの制約でうまくいきます。しかし、どのようにしてこの操作を追跡できますか? (それは私がデータベースロギング操作の何らかの形を意味することによって)。削除されたレコードがセカンダリデータベースまたは同じデータベース上の別のテーブルに挿入された場合は、良い考えですか?
  2. もう一つのアイデアは、のは、(削除されたレコードのための)可能(アクティブ/有効なため)値1と0とのvalidを言わせて、列を持っていることであろう。 「削除」操作では、この列の値を単に0に設定し、ビジネスロジックはそれを考慮しません。ロギングは、すべてのレコードを保存することによって、同じデータベース上で実行されます。このアプローチでは、外部キーに基づいて別のテーブルからレコードを更新するなど、追加のタスクを実行するためにトリガーを頻繁に使用する必要があります。

あなたが持っている場合は、このタスクを達成するための追加の方法を自由に追加してください。また 、我々はその変種1を決めるだろう場合は)最高の作品、それがDELETE FROM database1.tableINSERT into database2.tableの両方を実行するためにJavaコードから開始したのと同じトランザクション()で可能ですか? (私は正直言ってこれを試していないが、私はそれが動作するとは思わない)。私はちょうど最初のデータベースからの削除された行と2番目の行の行が欠けてしまうことを望んでいません。最良のオプション)が可能、まだ1ない場合は、TABLE1からレコードを削除し、同じトランザクション内で表2にそれらを挿入することによって、TABLE1からtable2のにデータを「移動する」をお勧めですか?

心のMySQLサーバにデータベースの整合性と解決策は私の質問に答える際に/また、ログの問題を解決する必要が解決策を提案するという事実を保つ内蔵のチェックを持ってください。私は最初のアプローチを好む

+0

私はpersonnalyが有効な/削除された列で行く、あなたが "ペンディング"など、後で必要な場合はいくつかの行を作ることができます。 –

+0

どのような種類のデータについて話していますか?アーカイブに移行した場合、データをマイニングすることで利益を得ることができますか? –

答えて

1

は、それが参照一体性であなたを助け、...、あなたはベーステーブル上のトリガとそれを処理することができ、そのすべてが

0

は、一般的に、私はfisical排除を考える同じトランザクション内で起こりますレコードの価値は決して良い考えではありません。非有効なものとして記録にフラグを立てるよう

A「ロジック」排除は最高のアイデアだろう。 は、「現実世界」で実際には、largesおよび重要なデータベースのレコードはfisically削除されることはありません。私はデータベース操作のすべてを追跡することができるので、2番目の方法が好まれます。

+0

ご返信ありがとうございます。私はまだ、このケースでは、ON UPDATEの制限文を、1から0までの有効な列の変更に対してどのように使用するのか分からない。 – hypercube

+0

私はdb構造を知らないので、あなたの質問に答えるのは簡単ではありません。私は、RESTRICTをCASCADEに変更すると便利なことがあると思います。たとえば、テーブル1のレコードのisValidFieldが存在する場合は、table2でも変更されるためです – Franky

関連する問題