我和一些同事就存储历史数据的最佳方法进行了辩论。当前,对于某些系统,我使用一个单独的表来存储历史数据,并且为当前的活动记录保留一个原始表。因此,假设我有表FOO。在我的系统下,所有活动记录都将进入FOO,所有历史记录都将进入FOO_Hist。用户可以更新FOO中的许多不同字段,因此我想对所有更新内容保持准确的了解。FOO_Hist保留与FOO完全相同的字段,但自动递增的HIST_ID除外。每次FOO更新,我执行插入语句插入FOO_Hist类似于:insert into FOO_HIST select * from FOO where id = @id
。
我的同事说这是错误的设计,因为出于历史原因,我不应该拥有表的确切副本,而应该在活动表中插入另一个记录,并带有一个标志,表明该记录是出于历史目的。
是否有处理历史数据存储的标准?在我看来,考虑到可能超过一百万条记录,我不想将我的活动记录与所有历史记录都放在同一张表中(我在考虑长期)。
您或您的公司如何处理?
我正在使用MS SQL Server 2008,但我想保留所有DBMS的通用和任意答案。