joh*_* Gu 1 sql-server database-design
我想为我们的系统添加审计跟踪,所以当发生任何添加/删除/更新操作时,我将使用以下信息记录它: -
CRUD操作类型.是添加,删除还是更新.
已修改的记录ID.
日期和时间.
现在我发现了两种方法; 要么拥有一个包含以下字段的审计跟踪表: -
或者有两个表用于CRUD操作的查找表,例如
审计审判将参考上表: -
那么哪种方法更好?
第二个问题如果我将遵循第二种方法.然后我最好在我的代码中使用CRUD_ID,例如,如果oprration是delete,我的代码可能如下: -
Inset into audit_trail (ID, CRUD_ID, Record_ID, Date) values ( 123445, 3,12771,1june2O13) //CRUID 3 represents delete operation.
Run Code Online (Sandbox Code Playgroud)
最好的祝福
Moh*_*ari 11
从数据库设计的角度来看(忽略数据库功能和应用程序体系结构)我希望通过实现一个名为Trail_History
没有任何外键的平面表来实现每个实体和每个字段的更改的审计跟踪表(更改历史记录),列将是:
UserCode
:表示进行更改的应用程序用户唯一标识符.(强制)TransactionCode
:任何CRUD操作都需要具有唯一的事务代码(如GUID)(强制)ChangeDate
: 交易日期.(强制)EntityName
:正在操纵的实体(表).(强制)ObjectId
:被操纵主键的实体.FieldName
:实体字段名称.OldValue
:实体字段旧值.NewValue
:实体字段新值OperationType
:CRUD操作鉴别器.(强制)使用此方法
可以跟踪任何实体(表)
报告将是可读的
仅记录更改.
事务代码将是通过单个操作检测更改的关键点,第二个问题将得到解答.
希望有所帮助.