我有三张桌子(现实很多,但这三张是我现在要担心的)
产品线表如...
ProductLineId (pk)
Name
Description
Price
Finance Event (FK)
和财务事件表一样......
EventId (pk)
Event Description
和金融交易表一样......
TransactionId (pk)
FinanceEventId (fk)
LotsOfSageReferencesAndOtherForeignKeys
处理销售时,会根据财务事件等创建交易记录。
问题是;如果管理员中有人进入并更改了财务事件,那么对事件表进行版本控制的最佳方式是什么,同时保留主键。
答案 0 :(得分:2)
一般来说,您有几种选择:
首先处理时态数据时,您应该将实际值存储在事务表中,而不仅仅是ids。然后其他表用作创建新记录的查找表,但是您总是知道交易时真实数据是什么,这将包括随时间变化的事物,如价格,客户名称等。注意您可能还需要存储id字段,以防你需要查找当前的等价物。
或者您可以完全禁止在查找表和触发器上进行更新,停用当前记录并在有人运行更新语句时插入新记录。现在,您的子表包含创建记录时处于活动状态的记录的值。在这种情况下你失去的是能够查找当前值(这就是为什么你可能不想为客户名称或价格这样做)。
对于您可能不关心它是否随时间变化但希望反映当前信息的数据,允许更新但通过触发器维护审计或历史记录表;因此,如果需要,您可以重新创建当时的价值,或者查看谁更改了什么和何时(有时是法律要求)。
这些选项中哪一个适合您目前的情况,只有您自己知道。