一、數據表的設計
在數據庫中,我們通過如右圖所示的具有主子關系的兩個表存儲AuditLog相關信息。我們將“事務”作為我們進行追蹤的單位,不過這里的講的“事務”更多地指業務處理事務的概念。每一個被追蹤的事務在AuditLog表具有一條匹配的記錄,該記錄表示該事務的基本信息:UserName(操作者)、AuditTime(操作時間)、Activity(可以看成是對事物的命名)和Description(事務補充性的描述)。主鍵TransactionId唯一標識一個事務。
子表AuditLogData記錄事務詳細的信息,即事務所引起的數據變化。一個完整的業務邏輯往往涉及到對多個數據表、多條記錄的操作。而AuditLogData每一條記錄表示某個事務針對某個單一數據表所帶來的數據變化,而SourceTable字段表示源表的名稱。而DataChange字段以XML的形式表示數據的改變,它具有如下的格式。
二、數據變化的表示
數據操作類型無外乎添加、更新和刪除,我們通過不同的XML結構表示不同操作引起的數據改變。具體來說,對于添加操作,我們需要記錄下插入的記錄;對于刪除操作,需要記錄下原來的記錄;而對于數據更新,則需要同時記錄下更新先后的記錄。
舉個例子,假設我們具有一個Users表,它具有三個基本字段:Id、Name和Birthday。下面的XML分別表示添加、刪除和更新操作后我們需要記錄下的數據變化。
1: <?xml version="1.0" encoding="utf-8" ?>
2: <cdc operation="insert">
3: <current>
4: <Id type="VARCHAR(50)">001</Id>
5: <Name type="NVARCHAR(50)">Foo</Name>
6: <BirthDay type="DATE">1981-08-24</BirthDay>
7: </current>
8: </cdc>
1: <?xml version="1.0" encoding="utf-8" ?>
2: <cdc operation="delete">
3: <original>
4: <Id type="VARCHAR(50)">001</Id>
5: <Name type="NVARCHAR(50)">Foo</Name>
6: <BirthDay type="DATE">1981-08-24</BirthDay>
7: </original>
8: </cdc>
1: <?xml version="1.0" encoding="utf-8" ?>
2: <cdc operation="update">
3: <original>
4: <Id type="VARCHAR(50)">001</Id>
5: <Name type="NVARCHAR(50)">Foo</Name>
6: <BirthDay type="DATE">1981-08-24</BirthDay>
7: </original>
8: <current>
9: <Id type="VARCHAR(50)">001</Id>
10: <Name type="NVARCHAR(50)">Bar</Name>
11: <BirthDay type="DATE">1982-07-10</BirthDay>
12: </current>
13: </cdc>
it知識庫:一個完整的用于追蹤數據改變的解決方案,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。