モジュール用の単一の集中ログ テーブル、または分離されたログ テーブル?
質問
中堅企業向けのイントラネット システムを設計しています。すべてのモジュールに対して単一のログ テーブルを維持する必要がありますか、それとも別個に作成する必要がありますか?
監査ログには、すべての管理者/スタッフのアクティビティ (オブジェクトの作成、更新、削除) が記録され、ログ構造はあらゆる種類のモジュールに共通です。
また、ログ記録に基づいてレポートを取得することは良い考えですか?ログ テーブルにはオブジェクト タイプとオブジェクト ID が保存されているため、イベント、オブジェクト名、オブジェクト ID に基づいていつでも任意のオブジェクトのデータをフェッチできます。
このような場合に報告するための最良のアプローチは何ですか?
解決
さて、ログを確認するとき、すべてを確認できる 1 か所で確認するのと、システムの 1 つの部分だけを個別に表示するいくつかの異なる場所を確認するのと、どちらを希望しますか?
単一のテーブルでは、無関係なエントリやユーザーが表示する権限を持たないエントリをフィルタリングして除外するのは簡単であることに留意してください。複数の個別のログを 1 つの包括的なビューに結合するのは少し手間がかかります。さらに、ほとんどの設計では、新しいログ テーブルが追加されるたびに結合を行うコードを再検討する必要があるという欠点もあります。
単一のログが望ましいと断言します。複数のログを分離することが適切であると考えられる唯一の状況は、セキュリティ上の懸念が十分に強く、可視性が異なるログ エントリを物理的に分離する必要がある場合です。そのような場合は、おそらく別々のログを参照することになるでしょう。個別のテーブルだけでなく、ログ サーバーも必要になります。
他のヒント
私は1つのテーブルを言うと思います。
(私が正しく理解していれば)次の例のように、すべてのモジュール間でのユーザーの活動を検索することがあります。どちらのテーブルに適しています。
あなたのログテーブルをオフに報告することはOKでしょう。あなたは、ロギングテーブルの上に競合し、負荷を軽減するために、別のレポートデータベースにオフロードします。
最後に、私は、オブジェクト名を格納しますし、明示的に(データベースオブジェクト)を入力します。 ドロップして作成した場合、その後IDが変更されます。それのタイプとOBJECTIDの両方が変更されますので、またはテーブルは、例えばビューになることがあります。
私たちは、単一のテーブルを使用して、それは特に、パフォーマンスに、最善の解決策であることが判明しました。特に大規模なデータセットを持ちます。あなたは既製のソリューションに興味があれば - このにしてみてください。
。