主キーの代理キーではなく自然キーを使用して SQL Server テーブルを設計しています。私が遭遇した問題は、過去にサロゲート キー テーブルで使用した監査テーブル形式ではうまく機能しないことです。通常、監査対象のテーブルと同じ列を持つ監査テーブルを作成します。監査対象の表に対するトリガーは、更新または削除前の行の状態と一致する新しい行を監査表に書き込みます。整合性を確保するために、テーブルの複合 PK としてサロゲート キーと変更日列の両方を使用します。サロゲート キーを使用しないと、複合キーを構成する列の 1 つが変更された場合に変更を追跡できません。
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 テーブル レコードの変更をどのように追跡しますか?