|
一、数据表的设计
在数据库中,我们通过如右图所示的具有主子关系的两个表存储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知识库:一个完整的用于追踪数据改变的解决方案,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。