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