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

发表于:2010-12-16 10:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Artech(cnblogs)    来源:51Testing软件测试网采编

  摘要:介绍一个完整的Audit Trail解决方案,不仅可以记录每一笔业务操作的信息(比如操作时间、操作者等),并且可以追踪每一笔业务引起的说有数据的改变(如果需要)。

  一、数据表的设计

  在数据库中,我们通过如右图所示的具有主子关系的两个表存储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>

  当然,你也可以根据需要自定义XML的结构。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号