审计架构

时间:2015-04-06 21:55:09

标签: sql sql-server database-design

我正在设计一个数据库来捕获我公司执行的审核。我在查找捕获所有审计点的有效方法时遇到了一些麻烦,而没有在一个表中创建60列。是否有一种有效的方法可以在一列中捕获多个数据点,并且仍然可以毫无困难地进行查询。

每次审核可能有0到60个独特引文。我将制作一个参考表来保留每一个监管引文,但我如何设计中心表以便引用'引用'列可以有,或,或任何数量的其他组合?

2 个答案:

答案 0 :(得分:0)

我通常会尝试将审核信息保存在一个表中。 为了做到这一点,我做了这样的事情:

TABLE: Audit
**Id** (PK)
**EntityClass** (the Class, or type, or whatever you want to identify your entities by)
**EntityId** (the id of the entity in it's own table)
**PropertyChanged** (the name of the property of the entity that changed)
**OldValue** (the old value of the property)
**NewValue** (the revised value of the property)
**TimeStamp** (moment of the revision)
**RevisionType** (transaction type: Insert, Update, Delete)

这是最简单的架构,如果您愿意,可以使用其他列构建。

希望这会有所帮助。干杯!

答案 1 :(得分:0)

在这个例子中,我假设,因为你引用一个特定的数字,如果引用,有 - 或可能 - 一个分类表,包含60个定义或引用,每种引用一个。 / p>

审核表包含有关每次审核的相关信息。我猜测了大部分内容,但请注意,没有提及任何引用。

create table Audits(
    ID          int  identity( 1, 1 ),
    Started     date,
    Completed   date,
    CustomerID  int,
    AuditorID   int,   -- More than one possible auditor? Normalize.
    VerifierID  int,
    Details     ...,
    constraint  PK_Audits primary key( ID ),
    constraint  FK_Audits_Customer( foreign key( CustomerID )
        references Customers( ID ),
    constraint  FK_Audits_Auditor( foreign key( AuditorID )
        references Auditors( ID ),
    constraint  FK_Audits_Verifier( foreign key( VerifierID )
        references Auditors( ID ),
    constraint  CK_Audits_Auditor_Verifier check( AuditorID <> VerifierID )
);

AuditCitations 表包含每个审核的每个引文,每个引文都有一个条目。请注意,PK会阻止同一审核对同一个引用有多个引用(当然,这是您的规则)。

create table AuditCitations(
    AuditID     int,
    CitID       int,
    Details     ...,
    constraint  FK_AuditCitations_Audit( foreign key( AuditID )
        references Audits( ID ),
    constraint  FK_AuditCitations_Citation( foreign key( CitID )
        references Citations( ID ),
    constraint  PK_AuditCitations primary key( AuditID, CitID )
);

引用可能有自己的审核员和验证员/检查员,或者几乎任何适用于特定引用的内容。这个例子主要是显示两个表之间的关系。