2009-02-18 49 views
2

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

+0

我htaler同意,我平時也與更新觸發器去在現場表上。在更新時向歷史表插入新記錄。然後,您可以安排一個SQL作業來清理過時的歷史數據。 – parapet 2009-02-18 08:35:41

回答

1

這是一個比最初看起來更廣泛的話題。關於「隨時間變化的事物」,Martin Fowler有一個不錯的narrative

2

首先,我想對您提出的解決方案發表評論。當然,薄弱環節實際上可能會在你的間隔期間發生一次以上的變化。這意味着,該記錄在一天中更改了三次,但只記錄了最後一次更改。

可能有更好的解決方案,但它必須是事件驅動的。如果您的數據庫服務器支持事件或觸發器(如MS SQL),則應該編寫一個觸發器代碼,用於在歷史記錄表中創建條目。如果您的服務器不支持觸發器,則可以將存檔代碼添加到應用程序(在保存操作期間)。

1

您可以在價格表上放置一個觸發器。這樣,您可以在每次更新或刪除事件時將舊價格存檔在另一張表中。

0

如果您所需的歷史數據是當天數據結束的快照,則您的方法似乎很有用 - 過去,我使用了一種類似的方法來處理當天的新數據(時間戳)然後使用「刪除所有今天具有時間戳<的數據 - x」,其中x是我想保留的數據的時間段。

如果您需要跟蹤所有歷史記錄更改,那麼您需要查看觸發器。

0

我想,一個設定時間後,開始覆蓋初始條目以最小的努力來找到最初條目

我們的數據存儲在歸檔表,使用一個觸發器,因爲其他人建議。我們的存檔表具有AuditDate的附加列,並存儲「已刪除」數據 - 即先前版本的數據。當前數據只存儲在實際表中。

我們沿着「刪除3個月以上的所有存檔數據,至少存在一個3個月以下的存檔記錄;刪除超過6個月的所有存檔數據「

因此,如果在過去3個月沒有價格變化,您仍然可以在3-6個月前的價格變化記錄。

(問,如果你需要的自引用聯接做刪除或觸發存儲在歸檔表格變化的一例)

相關問題