|
一、數(shù)據(jù)表的設(shè)計(jì)
在數(shù)據(jù)庫(kù)中,我們通過(guò)如右圖所示的具有主子關(guān)系的兩個(gè)表存儲(chǔ)AuditLog相關(guān)信息。我們將“事務(wù)”作為我們進(jìn)行追蹤的單位,不過(guò)這里的講的“事務(wù)”更多地指業(yè)務(wù)處理事務(wù)的概念。每一個(gè)被追蹤的事務(wù)在AuditLog表具有一條匹配的記錄,該記錄表示該事務(wù)的基本信息:UserName(操作者)、AuditTime(操作時(shí)間)、Activity(可以看成是對(duì)事物的命名)和Description(事務(wù)補(bǔ)充性的描述)。主鍵TransactionId唯一標(biāo)識(shí)一個(gè)事務(wù)。
子表AuditLogData記錄事務(wù)詳細(xì)的信息,即事務(wù)所引起的數(shù)據(jù)變化。一個(gè)完整的業(yè)務(wù)邏輯往往涉及到對(duì)多個(gè)數(shù)據(jù)表、多條記錄的操作。而AuditLogData每一條記錄表示某個(gè)事務(wù)針對(duì)某個(gè)單一數(shù)據(jù)表所帶來(lái)的數(shù)據(jù)變化,而SourceTable字段表示源表的名稱。而DataChange字段以XML的形式表示數(shù)據(jù)的改變,它具有如下的格式。
二、數(shù)據(jù)變化的表示
數(shù)據(jù)操作類型無(wú)外乎添加、更新和刪除,我們通過(guò)不同的XML結(jié)構(gòu)表示不同操作引起的數(shù)據(jù)改變。具體來(lái)說(shuō),對(duì)于添加操作,我們需要記錄下插入的記錄;對(duì)于刪除操作,需要記錄下原來(lái)的記錄;而對(duì)于數(shù)據(jù)更新,則需要同時(shí)記錄下更新先后的記錄。
舉個(gè)例子,假設(shè)我們具有一個(gè)Users表,它具有三個(gè)基本字段:Id、Name和Birthday。下面的XML分別表示添加、刪除和更新操作后我們需要記錄下的數(shù)據(jù)變化。
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知識(shí)庫(kù):一個(gè)完整的用于追蹤數(shù)據(jù)改變的解決方案,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。