0

我有两个表 stok 和 stok_detail。表 stock 是表 stock_detail 的摘要。

stok 由 3 列组成:item_id、qty 和 cost

库存明细由 5 列组成:transaction_id、posting_date、item_id、数量和成本。

当有人编辑某些交易时,可能会重新计算成本。

例如,在日期 10 购买编辑交易。日期 10 之后的所有后续交易的成本将被重新计算。

我已经把所有的计算都放在了存储过程中。

问题是,如果有很多事务要重新计算,这个事务可能需要几个小时。并且在某些情况下,当事务运行时,电源会掉下来,有时会导致 stock_detail 表损坏。

我的问题是:

首先将计算放在临时表上会更好吗?例如stock_calc。当所有计算完成后,表 stock_detail 将被更新,从 stock_calc 中获取值。所以表 stock_detail 会在所有计算完成后更新。

因此,如果出现问题,我只需清空表 stock_calc。我知道当交易更新 stock_detail 时电源可能会下降。但概率将被最小化。这当然会花费更长的计算时间。但如果它更安全,我可能会考虑这种方法。

你们有什么感想?任何意见和想法将不胜感激。

还有1件事。如果断电,当我重新连接到数据库时,是否可以看到所有未提交和提交/回滚的事务?

4

1 回答 1

1

Firebird 在构建时考虑了ACID兼容性。这意味着即使在网络或电源(硬件除外)发生故障时,“理论上”您的数据库也应该保持其完整性。

然而,也有数据损坏的情况,尤其是硬件故障或 Firebird 引擎编程错误。您应该将您的 FB 版本升级到您的主要版本的最新稳定版本。

此外,将更改大量数据的事务保持多个小时处于活动状态并不是一个好的架构设计,请避免这种情况。

于 2012-12-17T19:40:22.700 回答