我正在使用自然键而不是主键的代理键设计 SQL Server 表。我遇到的问题是它不适用于我过去与代理键表一起使用的审计表格式。通常,我将创建一个审计表,该表与被审计的表具有相同的列。正在审计的表上的触发器将新行写入审计表,该行与更新或删除之前的行状态相匹配。为了强制执行完整性,我使用代理键和修改日期列作为表的复合 PK。如果我不使用代理键,那么如果构成复合键的列之一发生更改,我将无法跟踪更改。
Log table example with Surrogate Key:
LogId (PK)
LogType
Data
ModifedDate
ModifedBy
LogAudit Table for Log table with Surrogate Key:
LogId (PK)
LogType
Data
ModifedDate (PK)
ModifedBy
Log table example with Natural Key:
LogType (PK)
Data
ModifedDate (PK)
ModifedBy
LogAudit Table for Log table with Natural Key:
LogType
Data
ModifedDate
ModifedBy
如果 LogType 或 ModifiedDate 更改,您如何跟踪 Audit 表中 Natural Key Log 表记录的更改?