2012-02-28 19 views
4

データの変更履歴をデータベースに保存する必要があります。たとえば、あるユーザがあるデータの一部のプロパティを変更することがあります。期待される結果は、我々はいくつかのデータのためのすべてのバージョンを取得することができ、これらの変更履歴に基づいてデータの変更履歴を保存する方法は?

Tom changed title to 'Title one;' 
James changed name to 'New name' 
Steve added new_tag 'tag23' 

のような1つのデータの変更履歴を取得することができます。

これを達成するための良いアイデアですか?伝統的な関係データベースに限定されません。

+0

Oracleでは、トリガはこれを行うのに適しています.SQLまたはSQLServerでも同じであるかどうかはわかりませんが、プログラマティックなやり方で、またはネイティブデータベーステクノロジを使用してこれを行うことを検討していますか?ネイティブデータベース技術を使用することは、データの変化を追跡する最も簡単で最も可能性の高い方法です。 –

+0

ありがとうございますが、私はネイティブデータベース技術を使用したくありません。 – donnior

答えて

2

これらは、通常、監査テーブルと呼ばれます。私が一般的にこれを管理する方法は、データベース上でトリガーを使用することです。ソーステーブルからの挿入/更新のたびに、トリガは_AUDITが付加された同じテーブル名と呼ばれる別のテーブルにデータをコピーします(命名規則は重要ではありません)。 ORACLEでは、ジャーナル・テーブルと呼ばれるものを提供しています。 ORACLEデザイナ(または手動)を使用して同じことを達成することができ、開発者はジャーナル/監査テーブルの末尾に_JNを置くことがよくあります。ただし、ソース表のトリガーを使用して、監査表にデータがコピーされます。

EDIT: 監査テーブルだけを管理するための別の新しいスキーマを作成することも、ソーステーブルを使用してスキーマ内に保持することもできます。私は両方を行う、それはちょうど状況に依存します。

1

私は様々なオプションについての記事を書いた:http://blog.schauderhaft.de/2009/11/29/versioned-data/

あなたがリレーショナルデータベースに接続しない場合、そこにデータを変更することはありませんデータベース(と思う)、「のみを追加」と呼ばれるものがありますが、唯一の新しい追加バージョン。あなたの場合、これは完璧なように聞こえる。残念ながら私は実装についてはわかりません。

+0

私はSQLServerを使って同様のことをしました。これはすばらしい解決策になる可能性があり、Jens氏によると、あなたはテーブルのデータだけを追加することになります。基本的にジャーナル・テーブルとソース・テーブルです。ただし、ソースを監査から分離し、パフォーマンスの問題を引き起こす可能性がある場合は、テーブルのデータが大幅に高速化することに注意してください。 – northpole

+0

CouchDBは追加専用データベースだと思います – velop

関連する問題