一个完整的用于追踪数据改变的解决方案

  一、数据表的设计

  在数据库中,我们通过如右图所示的具有主子关系的两个表存储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知识库一个完整的用于追踪数据改变的解决方案,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。