2011-05-08 44 views
3

保存数据的变化是否有一种设计模式,构建数据模型的银行应用程序需要的数据变化要经过权限等级时,需要考虑数据模型的设计模式?授权之前由其他用户

例如,如果ADMIN1更改为customer1表中的电话号码,变化不应该直到Admin2的授予它是有效的。

我们计划要实现的解决方案是一个临时表来保存更改的记录与改变的值,一旦授权批准的变化,那么我们更新了主表。当你有很少的表时,这可以很好地工作,但是随着表的增加,这会很麻烦。

回答

1

我不知道任何的设计模式,但我想我可能有另一个想法为你 -
只有一个其他的表,称为'Pending_Changes'与列'Table_Identifier''Column_Identifier''Record_Identifier''New_Value'
每一行代表某个表的某个记录的单列更改。
对于例 - 一排的('Customers', 'Phone_Number', '12345', '077-4453432')值将被用来代表客户的电话号码变更12345
这对夫妇这种方法的缺点是觉得─
1.所有的表必须有一个ID现场
2.更改单个记录可以跨越在PendingChanges表多行,因为它使一排每列改变值。

在都会颠倒这是很容易扩展的,很容易维护。

+0

我喜欢这样一个事实,即您的设计基于单个表来跟踪更改,并且缺点对于我的应用程序来说是可承受的。 – BuZain 2011-05-09 15:42:54

1

,当你有几桌,但会很麻烦的表格增加

不一定能正常工作。如果你设计得当,它可以很好地处理大量的表格。您可以构建一个漂亮而小巧的数据模型来保存更改。它不要求您创建每个表的副本。

例如您可以拥有一个表,如:AuditTables,AuditColumns,AuditChanges,AuditChangesDetails等,您可以在该模型中存储所需的所有更改,而不是创建与“实时”表对应的临时表。

+0

如果我有你的权利,AuditTables将有表的名单进行审核,挂AuditColumns具有每列表进行审核,挂AuditChanges和AuditChangesDetails到跟踪变化。我想这应该是充分的和可扩展的。我还喜欢下面的sJhonny的建议,它基于一张表。你的方法比较有什么好处? – BuZain 2011-05-09 05:38:29

+0

我猜想它会更灵活。看看http://www.krell-software.com并下载审计工具。这不完全是你需要的,但你会有一个很好的想法你的模型应该看起来。 – Novitzky 2011-05-09 12:15:46

0

我设计了这样的事情,这里是它的主要内容;

  1. 我为每个要创建行级版本控制的表创建镜像表。假设你有CUSTOMER表。您的镜像版本控制表将为VER_CUSTOMER 我希望具有行级版本控制的每个表都有一个名为RECORD_ID(GUID)的列
  2. 当插入到该表的记录时,我生成新的GUID并填充该字段。新记录也插入到VER_CUSTOMER表中,其中RECORD_ID添加到表的自然PK中。 当记录更新时,我再次生成新的GUID。用这个新的GUID填充RECORD_ID。更新后的记录也会发送到VER_CUSTOMER表。
  3. 删除记录时,我将CUSTOMER表中的记录标记为DELETED(不物理删除记录)。我在每张桌上都有IS_DELETED列。当试图删除记录时,我将该列设置为TRUE。再次删除的记录副本也会进入VER_CUSTOMER表。
  4. 因此,您在该表上的每个事务都有VER_CUSTOMER表中的相应记录,其中RECORD_ID和表的自然PK为PK。例如,如果CUSTOMER表的PK是CUST_ID。 VER_CUSTOMER的PK将是复合CUST_ID和RECORD_ID。

希望这有助于...

+0

有趣的设计,但更多的ver_tables行更新的版本控制模型;我想这是一个简单的两步制造商,检查工作流程的延伸。你怎么看? – BuZain 2011-05-09 15:39:06