我正在处理一个 Oracle 11g 数据库。系统 ATM 有很多用于记录交易相关记录的历史表。我们遇到的问题是事务历史信息记录跨越了多个表。例如,我们有一个名为
我们考虑采取的方法是,不是将数据保存在多个历史表中,而是将每个交易的整个系统状态保存到一个具有许多列的大型表中,以便稍后联接到大量视图中,加上主键索引,问题得到解决。
这样可以解决性能问题,因为数据会被检索而无需聚合。
在我看来,表格方法最大的缺点是,如果 SQL 视图结构存在错误,则可以进行修复,实际历史数据不受影响;如果写入历史表的机制(本质上是从视图移到代码中)存在错误,则数据将变得损坏,可能无法修复。
巨大的历史表与从多个历史表中组合数据的视图相比,还会带来什么其他的缺点呢?
TransactionDetail
的表,它有一个版本列,还有一个名为 TransactionQuestions
的表,它有自己的版本列。当需要检索历史信息时,会使用大量视图从数据库中获取数据——这非常缓慢,并且由于版本和多个连接的大小和复杂性,我们不断发现错误。我们考虑采取的方法是,不是将数据保存在多个历史表中,而是将每个交易的整个系统状态保存到一个具有许多列的大型表中,以便稍后联接到大量视图中,加上主键索引,问题得到解决。
这样可以解决性能问题,因为数据会被检索而无需聚合。
在我看来,表格方法最大的缺点是,如果 SQL 视图结构存在错误,则可以进行修复,实际历史数据不受影响;如果写入历史表的机制(本质上是从视图移到代码中)存在错误,则数据将变得损坏,可能无法修复。
巨大的历史表与从多个历史表中组合数据的视图相比,还会带来什么其他的缺点呢?