这个问题的标准解决方案是为每个数据表保留一个历史表,每当需要更新数据表中的行时,就会将当前行的副本插入到历史表中,然后更新数据表中的行。
这种解决方案的缺点有:
- 需要维护两个表而不是一个(如果表的结构需要更改)。 - 应用程序需要知道两个表而不是一个。 - 表的名称可能需要缩短以保持表名和历史表名的约定(例如,SOME_TABLE,SOME_TABLE_HIST)。
我正在考虑一种不同的解决方案,并想知道它是否可行。对于每个表,我们添加列IS_LAST。
- 当向表中插入行时,它将被插入IS_LAST = 1。 - 当更新行时,将原始行的副本复制到相同的表中,更改IS_LAST = 0,然后根据需要更新原始行(仍保持IS_LAST = 1)。
假设在我的情况下,平均更新行数为10次。还假设至少90%的应用程序操作仅发生在最近版本的行上。
我的数据库是Oracle 10g,因此为了使“活动”表变得轻巧,我们可以将表分成两个分区:IS_LAST = 1分区和IS_LAST = 0分区。
分区是解决历史数据保留问题的好方法吗?
这种解决方案是否限制了其他表的分区潜力?
谢谢!