我正在设计一个数据库来捕获我公司执行的审核。我在查找捕获所有审计点的有效方法时遇到了一些麻烦,而没有在一个表中创建60列。是否有一种有效的方法可以在一列中捕获多个数据点,并且仍然可以毫无困难地进行查询。
每次审核可能有0到60个独特引文。我将制作一个参考表来保留每一个监管引文,但我如何设计中心表以便引用'引用'列可以有,或,或任何数量的其他组合?
答案 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 )
);
引用可能有自己的审核员和验证员/检查员,或者几乎任何适用于特定引用的内容。这个例子主要是显示两个表之间的关系。