有些同事和我討論了存儲歷史數據的最佳方式。目前,對於某些系統,我使用單獨的表來存儲歷史數據,並且保留當前活動記錄的原始表。所以,假設我有桌子FOO。在我的系統下,所有活動記錄都將以FOO形式出現,所有歷史記錄將以FOO_Hist形式出現。用戶可以更新FOO中的許多不同字段,因此我想對所有更新的內容都進行準確的說明。 FOO_Hist與FOO保持完全相同的字段,但自動遞增的HIST_ID除外。每次FOO更新時,我都會在FOO_Hist中執行一條插入語句,類似於:insert into FOO_HIST select * from FOO where id = @id
。如何存儲歷史數據
我的同事說這是不好的設計,因爲由於歷史原因,我不應該有一張表的確切副本,應該用一個標誌表示它是出於歷史目的而插入到活動表中的另一條記錄。
有處理歷史數據存儲的標準嗎?在我看來,我不想將我的活躍記錄與我所有的歷史記錄混在一張表中,考慮到它可能超過一百萬條記錄(我在長期考慮)。
你或你的公司如何處理這個問題?
我正在使用MS SQL Server 2008,但我想保留通用和任意DBMS的答案。
我想我明白你在說什麼。所以我對我的FOO_Hist表做了真正的創建一個審計表。我沒有在更新中使用觸發器插入審計表,而是在程序中運行了一條語句。那是對的嗎? – Aaron 2010-10-06 15:57:13
非常。不過,使用觸發器進行這種審計日誌記錄會更好;觸發器確保任何更改(包括手動數據修復)都會記錄在審計日誌中。如果您有超過10-20個表來審計,則可能會更快地構建觸發生成器工具。如果審計日誌的磁盤通信量有問題,則可以將審計日誌表放在單獨的一組磁盤上。 – ConcernedOfTunbridgeWells 2010-10-06 15:59:52
是的,我100%同意這一點。謝謝。 – Aaron 2010-10-06 17:17:55