2009年05月06日

作成情報と更新情報

近頃はすべてのテーブルに、作成日・作成者・更新日・更新者の4フィールドを持たせる設計が多いです。この列を持たせる理由としては、おもにデータの作成された状態をトレースするためですが、改めてこの列の存在価値を考えたいと思います。

メリットとしては、論理的に間違ったデータが入った時にその登録経路のヒントとなることです。更新時間や更新者(あるいは更新モジュール)が分かれば、プログラムのどの場所に間違いがあるのか簡単に判明することがあります。
しかしデメリットも考えると多々あります。
まずこの情報は、最初と最後しか記録していません。そのため時間の経ってしまったデータについては、間でどのような書き換えが行われたかが不明です。
次に、データを書き出すプログラムが更新者や更新日を正しく書き出しているという前提も必要です。更新者や更新日情報を更新せずにデータだけ更新していたら、かえって問題の発見を遅らせてしまいます。
さらには、OracleでいうSQL-Plusのようなクライアントツールで直接SQL文を発行したときの情報も取得できません。

それらも踏まえると、次のような作戦もありなのではないでしょうか?
・トリガーを使って、履歴用のテーブルに更新者と更新日を記録する。
 →テーブル名、操作(CRUD)、更新日、更新者、更新モジュールID、主キーを列とする履歴テーブルにとにかく記録していく。履歴は追えるが内容までは追えない。パフォーマンスに難あり?
・記録しない
 中途半端な情報ならば、いっそ記録しないという手もあります。Oracleなどであれば、その気になればアーカイブログやREDOログなどから更新履歴を取得することも可能です。

何のために情報を残すのかを改めて考え直せば、どのレベルまで履歴を取っておくべきか答えは見えてくるはず。  
Posted by 中垣健志 at 17:38Comments(13)TrackBack(0)