我想确定我应该如何存储历史交易数据。

我应该将其存储在记录只是获取一个新的时间戳,每次重新插入一个表格?

我应该打出来的历史数据到一个单独的“历史”表,并只保持在“有效”表的当前数据。

如果是这样,我怎么做才好?随着一个触发器,自动将数据复制到历史表?或在我的应用逻辑?

<强>每Welbog的评论更新:

有将大量的历史数据(几十万行的 - 最终可能有数百万)

主要搜索和报告操作将在历史数据来运行。

性能是一个问题。该搜索不应该运行所有夜间产生的结果。

有帮助吗?

解决方案

如果要求仅用于报告,考虑建立一个独立的数据仓库。这允许您使用的数据结构,如渐变维度是多的历史报告更好,但不要在事务处理系统运行良好。得到的组合也移动了你的生产数据库的历史报告,这将是一个性能和维护的胜利。

如果你需要这段历史是在应用程序中,那么你应该实现某种版本或逻辑删除功能或使一切完全禁忌和重述(即交易永远不会被删除,只是逆转淘汰和重述)。想想很仔细地考虑是否真正需要这个,因为它会增加大量的复杂性。制作一个事务性应用程序,可以正确地重建历史状态相当难度比它的外观。财务软件(如承保sytems)未能做到这一点有很多比你想象的多。

如果您需要的历史专为审计记录,使阴影表和审计记录触发器。这是更简单,比试图准确和全面落实在应用程序中审计记录更稳健。触发器也将从应用外部来源拾取更改数据库。

其他提示

此问题沿着业务逻辑的行云。了解你的业务需求第一然后从那里开始。数据仓库是这种情况一个很好的解决方案。 ETL会给你很多的选择在处理数据流。您的“历史记录” VS“活动”的基本理念是完全正确的。如果保持与他们所有的维度和事实表数据仓库的历史数据将更加高效和灵活。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top