0

データベース側でイベント追跡をどのように実装しますか?テーブルに次の列があると仮定します。UserID、Column1、Column2、Column3ここで、UserIDは主キーであり、Column1には一意の制約があります。

ユーザーがアプリケーション側でColumn1、Column2、およびColumn3の値を変更できると想定します。

さらに、各列に加えられた変更を検出して、ユーザーに表示する必要があると想定します。

私はこのようなことをすることを考えました:

Table1: EventID (PK), EventDate, UserID, Column1 
Table2: EventID (PK), EventDate, UserID, Column2 
Table3: EventID (PK), EventDate, UserID, Column3 

もちろん主キーを除いて、上記の列のいずれにも一意性の検証はありません。このように、各列が変更されるたびに、新しい値を適切なテーブルに挿入し、列に加えられたすべての変更を追跡できますが、これは、Column1の一意の制約を放棄する必要があることを意味します。各UserIDの最新のColumn1値を取得し、それらを相互に比較することで、アプリケーション層の一意性を確認できます。(これがどれほど賢いかわからない)

これは、変更を追跡する必要がある列ごとに個別のテーブルを作成する必要があることも意味します。

データベース設計の専門家ではないので、イベントトラッキングを実行できる、最も洗練された方法でデータベースアーキテクチャを実装する方法を知りたいと思います。

PSこれが役立つ場合は、SQLAzureの使用に興味があります。

4

1 に答える 1

0

アプリケーションテーブルの各列のイベントをログに記録するためだけに、テーブル全体が必要になることはありません。すべてevent logsを1つのテーブルに保管します。次のように定義します。

EventLogs
    EventID (PK)
    EventDate
    UserID         # remember to add an index
    Field_changed  # format: TableName.FieldName as a string
    # or instead of Field_changed with both in one, you can do:
    Table_changed
    Column_changed

持っているテーブル/アクション/イベントの数に応じて、前/後の値を保存したい場合は、物事を少し分けることができますが、必須ではありません。

「特定の列」の追跡については、Updates成功したときにアプリコードに追加します。どのように追跡する予定かはわかりませんがInserts、それも必要な場合は、ログテーブルに(列挙)フィールドをDeletes追加してください。Event_Type

于 2012-10-16T17:11:30.907 に答える