SQL Server 2008中的非破坏性更新,版本控制财务数据

时间:2012-04-03 14:21:21

标签: sql database sql-server-2008 tsql database-design

我有三张桌子(现实很多,但这三张是我现在要担心的)

产品线表如...

ProductLineId (pk)
Name
Description
Price
Finance Event (FK)

和财务事件表一样......

EventId (pk)
Event Description

和金融交易表一样......

TransactionId (pk)
FinanceEventId (fk)
LotsOfSageReferencesAndOtherForeignKeys

处理销售时,会根据财务事件等创建交易记录。

问题是;如果管理员中有人进入并更改了财务事件,那么对事件表进行版本控制的最佳方式是什么,同时保留主键。

1 个答案:

答案 0 :(得分:2)

一般来说,您有几种选择:

首先处理时态数据时,您应该将实际值存储在事务表中,而不仅仅是ids。然后其他表用作创建新记录的查找表,但是您总是知道交易时真实数据是什么,这将包括随时间变化的事物,如价格,客户名称等。注意您可能还需要存储id字段,以防你需要查找当前的等价物。

或者您可以完全禁止在查找表和触发器上进行更新,停用当前记录并在有人运行更新语句时插入新记录。现在,您的子表包含创建记录时处于活动状态的记录的值。在这种情况下你失去的是能够查找当前值(这就是为什么你可能不想为客户名称或价格这样做)。

对于您可能不关心它是否随时间变化但希望反映当前信息的数据,允许更新但通过触发器维护审计或历史记录表;因此,如果需要,您可以重新创建当时的价值,或者查看谁更改了什么和何时(有时是法律要求)。

这些选项中哪一个适合您目前的情况,只有您自己知道。