审计表困境

时间:2013-05-09 14:12:34

标签: sql-server mongodb amazon-dynamodb

我正在尝试创建一个记录系统中几乎所有内容的Audit表。 我打算使用触发器,但我想记录搜索等内容,我总是想记录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会更好吗?
  4. 感谢任何帮助, / r3plica

0 个答案:

没有答案