我正在設計一個數據庫來存儲產品信息,我想存儲幾個月的歷史(價格)數據以供將來參考。不過,我希望在一段時間後,儘可能少地花時間重寫初始條目以查找初始條目。有沒有人有如何解決這個問題的好主意?我最初的設計是創建一個名爲歷史數據的表格,並且每天都會抽取活動數據並將其存儲到具有時間戳的歷史數據庫中。有沒有人有更好的主意?或者可以看到我的問題?你將如何維護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