1. ホーム
  2. database

[解決済み] 変更履歴/監査データベーステーブルの最適なデザインは?[クローズド]

2022-08-12 07:27:34

質問

私は、異なる変更ログ/監査(何かが追加されたとき、削除されたとき、変更されたときなど)を格納するために、データベーステーブルを作成する必要があります。 (何かが追加されたとき、削除されたとき、修正されたとき、など)を格納するためにデータベーステーブルを作成する必要があります。私は特に詳細な情報を格納する必要はないので、私はラインに沿って何かを考えていました。

  • id (イベントの場合)
  • トリガーとなったユーザー
  • イベント名
  • イベントの説明
  • イベントのタイムスタンプ

ここで何か見逃していませんか?もちろん、私はデザインを改善し続けることができますが、複雑にするつもりはありません(イベントの種類やそのようなもののために他のテーブルを作成することは、私の必要性のために複雑なので問題外です)。

どのように解決するのですか?

私が携わっているプロジェクトでは、監査ログも、ご指摘のような非常にミニマルなデザインから始まりました。

event ID
event date/time
event type
user ID
description

考え方は同じで、物事をシンプルにすることでした。

しかし、このミニマルなデザインでは十分でないことはすぐに明らかになりました。典型的な監査は、次のような質問に煮詰まっていたのです。

Who the heck created/updated/deleted a record 
with ID=X in the table Foo and when?

そこで、このような質問に (SQL を使って) すぐに答えられるようにするために、結局、監査テーブルに 2 つのカラムを追加することにしました。

object type (or table name)
object ID

その頃、私たちの監査ログの設計は本当に安定しました (ここ数年)。

もちろん、最後の "improvement" はサロゲートキーを持つテーブルに対してのみ機能します。しかし、どうでしょう。監査する価値のあるすべてのテーブルは、そのようなキーを持っています!