2

システム内のほぼすべてを記録する監査テーブルを作成しようとしています。トリガーを使用するつもりでしたが、検索などを記録したいので、常に Action-er (アクションを実行したユーザー) を記録したいと考えています。

私のアプリケーションには記録が必要なさまざまなオブジェクト (プロファイル、会社、ページなど) があるため、さまざまなオブジェクトのすべての情報を保持するテーブルを作成する必要がありました。

私は MSSQL を使用していますが、おそらくドキュメント データベースを調べる必要がありましたが、データ用に SQL データベースを使用し、監査用にドキュメント データベースを使用することが良い考えであるかどうかはわかりません....おそらく誰かがこれを経験したことがありますか?

とにかく、私のテーブルは次のようになります。

CREATE TABLE [dbo].[cg_AuditTrail](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CompanyId] [uniqueidentifier] NOT NULL,
    [UserId] [uniqueidentifier] NOT NULL,
    [UserName] [nvarchar](255) NOT NULL,
    [ObjectName] [nvarchar](100) NOT NULL,
    [EventId] [int] NOT NULL,
    [Data] [xml] NOT NULL,
    [Date] [datetime] NOT NULL,
 CONSTRAINT [PK_cg_AuditTrail] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[cg_AuditTrail]  WITH CHECK ADD  CONSTRAINT [FK_cg_AuditTrail_cg_AuditEventTypes] FOREIGN KEY([EventId])
REFERENCES [dbo].[cg_AuditEventTypes] ([Id])
GO

ALTER TABLE [dbo].[cg_AuditTrail] CHECK CONSTRAINT [FK_cg_AuditTrail_cg_AuditEventTypes]
GO

ご覧のとおり、オブジェクトを XML としてデータベースに保存しています。オブジェクトをシリアル化可能なオブジェクトに変換するために、プロジェクトにファクトリ クラスを作成しました。ほとんどの場合、これは必要ありませんが、一部のオブジェクトでは必要です。これが私のファクトリーオブジェクトの例です:

    public static Objects.Page PageFactory(Page Object)
    {
        Objects.Page FactoryObject = new Objects.Page()
        {
            Id = Object.Id,
            ParentId = Object.ParentId,
            UserId = Object.UserId,
            CompanyId = Object.CompanyId,
            Author = Object.Author,
            DateCreated = Object.DateCreated,
            DateModified = Object.DateModified,
            ModifiedById = Object.ModifiedById,
            ModifiedBy = Object.ModifiedBy,
            Name = Object.Name,
            Description = Object.Description,
            Path = Object.Path,
            FileName = Object.FileName,
            Link = Object.Link,
            ViewTitle = Object.ViewTitle,
            Restricted = Object.Restricted,
            Published = Object.Published,
            TypeId = Object.TypeId,
            Type = Object.Type.ToString(),
            Order = Object.Order,
        };

        return FactoryObject;
    }

だから私の質問は次のとおりです:

  1. これは監査を作成する良い方法ですか?
  2. XML 列のデータを取得したい場合、それは SQL で可能ですか?
  3. MSSQL の代わりにドキュメント データベースを使用した方が良いでしょうか?

助けていただければ幸いです、/r3plica

4

0 に答える 0