どうを使用している監査証跡を表示する分野において編集?
-
21-08-2019 - |
質問
プロジェクトのために、お問い合わせをいただいてお作り監査証跡のすべての変更をしています。この時に私を監査証跡、そして多くの研究用になれます。
アプリケーション開発されたPHP/,MSSQL、低す。
から読みたいことに決めた、監査にはテーブル用トリガーに変えます。
という二つの要件ディスプレイするための応用として
を見ることができるログのすべての変更が適用されている分野(いんかい)
を見ることができ、閲覧記録を出願において、指標は次のフィールドには記録されたことのある変更やその他の情報などの日前ます。
項目#2"は現在与えてくれた悲しみをしなくても別のクエリのためのそれぞれの分野は非常に長い入れ子のクエリを代行いままで誰でもってご提案のための最適な方法です。してくれてありがとうございますの想いを追加する"ModifiedFlag"分野の各分野のテーブルとboolean指標の場合は分野をされていましたが、編集したり、そのような多くのオーバーヘッド。
解決
私は、監査情報とは別に実際のドメイン情報などが可能です。
要求#1: ると思いますを追加監査テーブル記録の変わります。エリックすることが提案ができない生活を送っているとの監査情報のトリガを使用のSQLデータベースです。この両方のアプリケーションのニーズを意監査の論理です。
場合データベースなトリガー、そしておそらくは何らかの永続化やデータベース。こうすることも良い場所にこのようなロジックとして再きを最小限に抑える依存関係 通常の アプリケーションコードとともに、監査コードです。
要求#2: とを示す指標ないリクエストに関する操作の権限の分野のテーブルを格納するのを見込んでいます。(このような依存関係の存在すると 通常の アプリケーションコードをご 監査証跡 があります。
私のようなコードを表示形でも責任監査を示すデータの分野です。このクエリーオーバーヘッドがそのコストを表示するこ層の情報です。もしかするためのデータベースによるオーバーヘッドのメタデータの追加、監査を可能にする情報を簡単検索。
大きなEnterprisy用と私用の約以下の構造
- 変更のヘッダテーブルに対応する変更の記録を表示します。
分野:
changeId, changeTable, changedPrimaryKey, userName, dateTime
-変化の分野に対応するテーブルフィールドが変更されます。
分野:
changeId, changeField, oldValue, NewValue
サンプル内容:
ヘッダーを変更:
'1', 'BooksTable', '1852860138', 'AdamsD', '2009-07-01 15:30'
変更項目:
'1', 'Title', 'The Hitchhiker's Guide to the Gaxaly', 'The Hitchhiker's Guide to the Galaxy'
'1', 'Author', 'Duglas Adasm', 'Douglas Adams'
この構造でも簡単に閲覧の監査証跡などを簡単に検索を実現するための検討をご希望の指標である。一つのクエリ内のヘッダ項目のテーブルにおいてどのように取得する全ての情報を単一の形式です。(あるいはテーブルのときのリストを示すId)
他のヒント
一般的な要件の低迷がフィールドを変えたようにわずかに奇数の「匂い」。レコードは長く住んでいたし、時間をかけて変更される場合があります場合は、最終的にはすべてのフィールドはそう警告を受ける傾向があります。したがって、私はすべてのユーザーがフィールドごとの指標の簡単なセットの意味を作ることができるか疑問に思います。
思考のそのラインは、私はあなたが説明してきたように、あなたがする必要がありますを格納したデータは、記録されたすべての変更、および最初の本当の挑戦との真の監査証跡は情報がに提示しなければならない方法を決定することであることを疑うになりユーザーます。
私はaggregateOfTheAuditTrailデータのいくつかの種類を準備するあなたのアイデアは非常に有用である可能性が高いと思います。質問だろうが十分レコードごとに単一のフラグですか?ユーザーのプライマリアクセスはリストをであれば、多分それはちょうど、後でドリルダウンのために変更されたレコードを強調するために十分です。またはごく最近変更されたレコードが強調表示されるように、記録値の最後の変更の日付、 - すべてのバック者の真のニーズが何であるかに。私はそれは難しいレコードは3年前にこれらの変更は先週と同じくらいのinterstingている変更されたことを想像して見つけます。
その後、我々はダウン単一のレコードにドリルに来るとき。ここでも、フィールドごとの簡単なフラグが(ドメイン、要件が)便利な鳴りません。それがある場合は、お使いの概要アイデアが細かいです。私の推測では、フィールドへの変更、およびレコードへの全体的な変化の配列の配列は、はるかに興味深いことです。従業員が賃上げを持っていた、従業員が部署を移動し、従業員が昇進した= 3つの別々のビジネスイベントまたは1つの?
シンプルなフラグ以上のものが必要な場合は、私はあなただけのレコードの全部(または最近の)監査証跡を返し、それを提示する方法UIフィギュアアウトを聞かせする必要があることを疑うます。
だから、私の最初の考えは:要約レコードのローリングメンテナンスのいくつかの種類には、良いアイデアのように聞こえます。必要に応じてバックグラウンドスレッドまたはバッチジョブで維持しました。私たちは、それは完全な監査証跡にするたびに行かなくてもビジネスに有用であることがdeisgn。その後、詳細な分析のために、我々は、検索対象のトレイルの一部またはすべてを可能にします。
個人的に、私は追跡を簡単に、かつ報告ファンキーなと思います。
ユーザーがレコードを挿入するたびに、あなたはそのテーブルの監査テーブルへの挿入を行います。
'I', 'Date', 'User', 'Data column1','Data Column2', etc.
これは経時的に変化しないであろうテーブルの構造を仮定している(再。DataColumnsの量)
更新については、単に挿入
'U', 'Date', 'User', 'Data column1', etc
ユーザーがちょうど更新のように入力したものを挿入します。
次に、挿入および更新した後、あなたは次のようになります。
'I','May 3 2009','BLT','person005','John','Smith','Marketing'
'U','May 4 2009','BLT','person005','John','Smith','Accounting'
すると、それがユニークな人物レコード「person005」の挿入やその部門が更新された更新を、持っていたことを示すためだけの簡単なレポートです。
によりシステムの使用率が低いのは、より複雑な報告プロセスの変更に関する簡単な挿入を持つことは、パフォーマンスに影響するつもりはありません。変更をバック報告のより高い強度のワークロードは、更新と同じように頻繁に行われていないのに対し、編集上の余分な負荷が、最小になるように、このスタイルは今でも、高い交通システムで動作しますので、システムは倒れません。