最初,我正在考虑一个可以处理所有审计日志的表,但就灵活性而言,例如在未来,您认为打破表并让每个应用程序拥有自己的审计日志是有意义的桌子?
例如,对于预订,我将有一个审核表来跟踪字段级别的所有更改,然后我将有另一个用于签证申请的审核表。
我目前的审计日志表设计是这样的
AuditLogID
Module
ActivityType
ReferenceNumber
FieldName
OldValue
NewValue
IPAddress
最初,我正在考虑一个可以处理所有审计日志的表,但就灵活性而言,例如在未来,您认为打破表并让每个应用程序拥有自己的审计日志是有意义的桌子?
例如,对于预订,我将有一个审核表来跟踪字段级别的所有更改,然后我将有另一个用于签证申请的审核表。
我目前的审计日志表设计是这样的
AuditLogID
Module
ActivityType
ReferenceNumber
FieldName
OldValue
NewValue
IPAddress
您所描述的模式似乎与实体属性值 (EAV) 一致,即每个字段一行。
假设所有模块中所有表的所有字段更改都会导致新的审计行,这种方法存在一些潜在问题
您还可能会错过 2 个重要的审计属性,即更改的 UserId 和 TimeStamp
您可以对审计表进行一些规范化,例如,有一个“每行一个”审计表和一个“每字段一个”审计表。例如,IP 地址、ReferenceNumber、Activity Type、UserId 和 TimeStamp 可能是同一行中所有更新字段的常量,这些字段由单个“操作”更改并且每行一次属于一次。
还有其他选择