数据模型设计模式,保持数据更改,直到另一个用户授权

时间:2011-05-08 20:47:30

标签: database-design data-modeling

在为需要更改数据的银行应用程序构建数据模型时是否需要考虑设计模式?

例如,如果admin1更改了customer1的电话号码,则在admin2授权之前,更改不应生效。

我们计划实施的解决方案是使用临时表来保存已更改的记录和更改的值,一旦授权者批准更改,我们就会更新主表。当你有几张桌子时这很好用,但随着桌子的增加会很麻烦。

3 个答案:

答案 0 :(得分:1)

  

当你有几张桌子时这很好用,但随着桌子的增加会很麻烦

不一定。如果你正确设计它,它将适用于大量的表。您可以构建一个漂亮的小数据模型来保存更改。它不需要您创建每个表的副本。

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

答案 1 :(得分:1)

我不知道任何设计模式,但我想我可能对你有另一个想法 -
只有一个名为'Pending_Changes'的表,列'Table_Identifier''Column_Identifier' 'Record_Identifier''New_Value'
每一行都代表一些列的更改,某些记录显示在某些表格中 例如,值为('Customers', 'Phone_Number', '12345', '077-4453432')的行将用于表示客户12345的电话号码的变化。
这种方法的缺点是 -
1.所有表格必须有一个ID字段
2.对单个记录的更改可以跨越PendingChanges表中的多个行,因为它为每个更改的列值保留一行。

在好的方面 - 它非常易于扩展且相当容易维护。

答案 2 :(得分:0)

我设计了类似这样的东西,这是它的要点;

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