我正在启动一个项目来为我们的软件(.NET 3.5/SQL Server 2008)创建一个“对象版本控制”功能,基本上它需要这样做:
用户正在查看 客户 :
姓氏是“ 史密斯-约翰逊” 2 个地址 (保存在不同的表中) 1 个产品 已购买 1 名员工联系方式 (保存在不同的表中) 200 封邮件(保存在不同的表格中) 用户点击“ 查看过去状态 ” 按钮并选择“ 2009 年 9 月 25 日 15:00 ”,这会显示一个单独的 View ,显示同一客户:
姓氏是“ Smith ”(此后名称已更改) 1 地址 (从那时起添加了地址) 1 个产品 购买了(不过是不一样上面说的是他买了这个,后来退了又买了新的) 2 名员工联系人 (因为从那以后删除了一个) 10 封邮件 在考虑一般问题时,会出现一些问题:
应该在什么级别记录更改,例如在 数据库 级别 (记录每个表的每个属性的每个更改)或 对象级别 (更改后序列化并存储每个对象及其依赖项)怎么会结构变化 表被处理,例如如果列“LastName”更改为“Surname”,如何跟踪列中的所有数据都属于同一列(因此版本控制服务不会报告“此客户在 9 月 25 日没有姓氏”而是知道查看姓氏。什么支持技术在 .NET/SQL Server 2008 区域中存在可能支持这一点,例如我正在查看 Change Tracking SQL Server 2008 的功能 版本控制存在什么样的模式,例如我在想 命令模式 可用于在应用程序中创建撤消功能。 此版本服务做 不是 需要执行回滚。它只需要能够显示 对象的状态和它们的依赖关系。 您在软件中实现版本控制功能的经验是什么?你有什么建议?
我曾开发过具有类似功能的软件。
不是在数据库中更新数据,而是将每个更改作为新记录插入。数据库中的每一行都有一个开始日期和一个结束日期。
最新记录是没有结束日期的记录。从那里,您可以通过搜索当时处于事件状态的记录来查询任何给定日期的数据状态。
明显的缺点是存储,以及您必须抽象数据层的某些方面以使历史跟踪对调用它的人透明的事实。