我正在设计一个数据库来存储产品信息,我想存储几个月的历史(价格)数据以供将来参考。不过,我希望在一段时间后,尽可能少地花时间重写初始条目以查找初始条目。有没有人有如何解决这个问题的好主意?我最初的设计是创建一个名为历史数据的表格,并且每天都会抽取活动数据并将其存储到具有时间戳的历史数据库中。有没有人有更好的主意?或者可以看到我的问题?你将如何维护SQL表中的历史记录?
2
A
回答
1
这是一个比最初看起来更广泛的话题。关于“随时间变化的事物”,Martin Fowler有一个不错的narrative。
2
首先,我想对您提出的解决方案发表评论。当然,薄弱环节实际上可能会在你的间隔期间发生一次以上的变化。这意味着,该记录在一天中更改了三次,但只记录了最后一次更改。
可能有更好的解决方案,但它必须是事件驱动的。如果您的数据库服务器支持事件或触发器(如MS SQL),则应该编写一个触发器代码,用于在历史记录表中创建条目。如果您的服务器不支持触发器,则可以将存档代码添加到应用程序(在保存操作期间)。
1
您可以在价格表上放置一个触发器。这样,您可以在每次更新或删除事件时将旧价格存档在另一张表中。
0
如果您所需的历史数据是当天数据结束的快照,则您的方法似乎很有用 - 过去,我使用了一种类似的方法来处理当天的新数据(时间戳)然后使用“删除所有今天具有时间戳<的数据 - x”,其中x是我想保留的数据的时间段。
如果您需要跟踪所有历史记录更改,那么您需要查看触发器。
0
我想,一个设定时间后,开始覆盖初始条目以最小的努力来找到最初条目
我们的数据存储在归档表,使用一个触发器,因为其他人建议。我们的存档表具有AuditDate的附加列,并存储“已删除”数据 - 即先前版本的数据。当前数据只存储在实际表中。
我们沿着“删除3个月以上的所有存档数据,至少存在一个3个月以下的存档记录;删除超过6个月的所有存档数据“
因此,如果在过去3个月没有价格变化,您仍然可以在3-6个月前的价格变化记录。
(问,如果你需要的自引用联接做删除或触发存储在归档表格变化的一例)
相关问题
- 1. 如何维护ASP.NET中的浏览器历史记录AJAX
- 2. 如何在SQL Server中的历史记录表中存储历史记录
- 3. 如何在php的网站上维护用户历史记录?
- 4. 用Nhibernate维护表历史
- 5. 将SQL Server点历史记录表迁移到历史记录表
- 6. 在SailsJS中维护模型更新的历史记录
- 7. 维护在Rails中的历史记录3
- 8. Android Filedownloader library:如何维护下载文件的列表/历史记录?
- 9. SQL触发维护修改历史
- 10. 维护可靠的服务状态历史记录
- 11. 如何在Android应用程序中维护以前的屏幕历史记录?
- 12. 维护FindBugs bug历史
- 13. Android WebView不维护历史
- 14. SQL历史记录表和触发器
- 15. SQL Server 2005表变更历史记录
- 16. 如何在Android项目中使用CVS来维护版本历史记录?
- 17. 使用Rails和ActiveRecord维护记录编辑历史记录的最佳方式
- 18. 如何设计数据库来维护库存的历史记录
- 19. SQL Server:我如何从历史记录表中获取数据?
- 20. GWT历史记录:历史记号
- 21. 更改历史记录表
- 22. 将历史记录插入新表
- 23. 如何使用Quartz调度程序来维护作业历史记录
- 24. SQL Server 2000如何查找表/行的事务历史记录
- 25. 如何在不使用CDC功能的情况下在单个表中维护多个表的历史记录
- 26. 为什么会将iframe的历史记录添加到历史记录中
- 27. 如何将更新的记录移动到历史记录表中?
- 28. 在apscheduler中维护工作历史
- 29. 如何保护包含git历史记录的文件夹
- 30. Linux下的SQL * Plus历史记录
我htaler同意,我平时也与更新触发器去在现场表上。在更新时向历史表插入新记录。然后,您可以安排一个SQL作业来清理过时的历史数据。 – parapet 2009-02-18 08:35:41