我和一些同事就存储历史数据的最佳方式展开了辩论。目前,对于某些系统,我使用一个单独的表来存储历史数据,并为当前活动记录保留一个原始表。那么,假设我有一个 FOO 表。在我的系统下,所有活动记录将进入 FOO,所有历史记录将进入 FOO _ Hist。FOO 中有许多不同的字段可以由用户更新,所以我想保持一个准确的帐户一切更新。FOO _ HIST 拥有与 FOO 完全相同的字段,但自动递增的 HIST _ ID 除外。每次更新 FOO 时,我都会在 FOO _ Hist 中执行类似于 insert into FOO_HIST select * from FOO where id = @id
的插入语句。
我的同事说,这是一个糟糕的设计,因为出于历史原因,我不应该有一个表的精确副本,而应该只是将另一条记录插入到活动表中,并用一个标志表明这是出于历史目的。
是否有处理历史数据存储的标准?在我看来,我不想把我的活动记录和我所有的历史记录放在同一张表中,因为它可能超过100万条记录(我考虑的是长期记录)。
你或你的公司如何处理这个问题?
我使用的是 MSSQLServer2008,但我希望保持任何 DBMS 的通用和任意答案。