2011-01-10 15 views
3

私はZendフレームワークを使ってWebベースのアプリケーションを開発しています。データベースの列値の変更を追跡します

私は、一連の列に対して行われた更新の履歴を保持する方法を探しています。

ユースケース: ユーザーは5つのプロパティを持つ項目を追加できます。ユーザーは5つのプロパティーを更新できます。私は彼がこれらの5つのプロパティに行うすべての更新を追跡する必要があります。

私は、以前の値、新しい値、列名、itemIDとタイムスタンプを格納するlogという名前の新しいテーブルを追加することを考えました。

これを行うにはどのような方法が最適ですか?既存の方法/オプション/例はありますか?

ありがとう、

答えて

3

おそらくあなたが探しているのは監査ログです。 MySQLデータベースでトリガーを使用して作成することができます。

これを行う方法の例はここにある:あなたのコメントでhttp://ronaldbradford.com/blog/auditing-your-mysql-data-2008-07-15/

データベースが「固定」されていないと付け加えたの下に。その場合は、テーブルに変更を複製して、新しく追加された列がログに追加されるように監査テーブルに適用する必要があります。

あなたのアプリケーションでこれを記録することを検討できます(この質問のために選択されたタグが示唆されているようです)。しかし、これはログが完全な回答を提供しない状況がある可能性があることを意味します。トリガ、ストアドプロシージャ、およびデータベース内の手動介入はログに記録されません。そのパスを終了する場合は注意してください。

+0

私のデータベースは修正されていません。これは問題になりますか?これは他のmysqlを使用することができますか? – panxpress

+0

固定であれば、列が変更されることを意味します(ユーザーがアプリケーション内で作業することに基づいています)。それは問題です。そして、はい、他のデータベース(私が知っているPostGres、MSSQL、他の多くのデータベース)がこれをサポートしています。 – kander

+0

ありがとうございます。これは本当に役に立ちます。列は変更されません。ちょうどdbは変更されるかもしれません。 – panxpress

1

トリガーは、監査を行う最も一般的な方法であり、ユーザーインターフェイスや他の場所から行われた操作をキャプチャする唯一の信頼性の高い方法です。彼らはどのように記述されるのかはデータベースごとに異なります。サポートする可能性のあるデータベースバックエンドの種類がわかっている場合、それぞれに別々のトリガーを書くことができます。

トリガーなしでこれを処理する必要がある場合は、監査テーブルに書き込み、更新を変更するプロセスを持つことをお勧めします。フレームワーク自体に依存するのではなく、Zendフレームワークによって呼び出されるストアドプロシージャを保証するのに十分複雑な場合があります。 (これは設定可能なものであれば、私は知らないので、私はZendのでfamilairないんだけど、私はストアドプロシージャがこれを扱うことができる知っている。)ここで

+0

私はそれらのうちの3つをサポートするかもしれないので、私は別のデータベースの種類のトリガーを処理することは大丈夫だと思います。ありがとう。 – panxpress

0

私はちょうど新しいテーブルがComp_Hist_Logそれを呼ば作成し、自分のデータベース内AFTER_UPDATEフックで続いUPDATEフック前 $ OLDDATA = $配列(「fieldname1」、「fieldname2」)

を の古いデータを定義しましたGUIフックファイル..私はこのコード

SQL(「Comp_Hist_Log。INSERT INTO(Com_Rec_Idold_datanew_dataChangedDateChangedBy

VALUES(追加 '{$データ[' RECORD_ID ']}'、 '{$ OLDDATA}'、 '$ $'; '$ $'); $ {'messageInfo [' username ']}') "、$ eo); 戻り値TRUE;

うまくいけばうまくいきます。

関連する問題