如何存储历史数据?

185
一些同事和我进行了一场关于存储历史数据的最佳方式的辩论。目前,对于某些系统,我使用单独的表来存储历史数据,并保留一个原始表用于当前有效记录。例如,假设我有表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。

将数据库中的记录进行版本控制的方法是什么? - Marco Eckstein
11个回答

0
实际问题是您是否需要同时使用历史数据和活动数据进行报告?如果是,请将它们放在一个表中,进行分区并创建一个视图,以供活动查询使用。如果您只需要偶尔查看它们(用于研究法律问题或类似情况),则将它们放在单独的表中。

2
在几个历史报告中连接两个表是否更加困难,还是修改每个单独的表插入/更新/删除以考虑历史问题更加困难?实际上,审计日志将包括历史表中的当前数据,因此在报告中甚至不需要当前表。 - user645280

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接