有些同事和我讨论了存储历史数据的最佳方式。目前,对于某些系统,我使用单独的表来存储历史数据,并且保留当前活动记录的原始表。所以,假设我有桌子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的答案。
我想我明白你在说什么。所以我对我的FOO_Hist表做了真正的创建一个审计表。我没有在更新中使用触发器插入审计表,而是在程序中运行了一条语句。那是对的吗? – Aaron 2010-10-06 15:57:13
非常。不过,使用触发器进行这种审计日志记录会更好;触发器确保任何更改(包括手动数据修复)都会记录在审计日志中。如果您有超过10-20个表来审计,则可能会更快地构建触发生成器工具。如果审计日志的磁盘通信量有问题,则可以将审计日志表放在单独的一组磁盘上。 – ConcernedOfTunbridgeWells 2010-10-06 15:59:52
是的,我100%同意这一点。谢谢。 – Aaron 2010-10-06 17:17:55