什麼是更好的做法?:有歷史表有什麼優點和缺點?
保存歷史記錄在一個單獨的歷史表
記錄歷史記錄不同狀態的活動表?
在我看來我寧願保持一個單獨的表,以避免重複記錄查詢表時,這可能會導致不必要的延遲時間創建一個巨大的表。
什麼是更好的做法?:有歷史表有什麼優點和缺點?
保存歷史記錄在一個單獨的歷史表
記錄歷史記錄不同狀態的活動表?
在我看來我寧願保持一個單獨的表,以避免重複記錄查詢表時,這可能會導致不必要的延遲時間創建一個巨大的表。
我的首選一直是要有一個單獨的歷史記錄表,純粹是因爲它不需要有一個「WHERE Status ='LIVE'」或「WHERE CurrentRecord = 1」來獲取最新記錄(我不會進入一個需要內聯查詢才能獲得最新版本的設計。這應該意味着當前記錄表應該保持較小,並且訪問時間可以得到改進等等。在最糟糕的情況下,我看到針對表的即席查詢選擇了錯誤版本的記錄,導致所有類型以後的問題。另外,如果您已經從另一個表中獲取歷史記錄,則可以對數據進行碎片整理,以便一年中的所有歷史記錄都位於一個表/ db中,而另一個歷史記錄位於另一個表/ db中,以此類推。
我會去一個單獨的表,否則設置UNIQUE和FK約束可能仍然可行,但也涉及到。
臨:
如果保留歷史在一個單獨的表,則只有當你需要從過去的搜索某些此數據將會被訪問。大多數時候主表的使用將遠遠超過歷史。所以這意味着更快的結果。
騙局:
在我工作的一個項目中,我有一個350列的表(不要問爲什麼.....)。所以這個表格在數據輸入時變得非常大。在特定時刻,記錄從「活躍」狀態變爲「關閉狀態」。我很想把所有關閉的記錄移到一個新的表格(歷史表格),但我意識到它更慢 - 在很多查詢中我不得不做出工會......
作爲最終意見我認爲這取決於每一種情況,但我總是會首先想到單獨的桌子。
我更喜歡使用一個表和partioning。我還會設置活動記錄的視圖,並在查詢活動記錄時使用它來代替基表。
你如何執行VIN或SSN是唯一的?如何確保當前行不是孤兒,但歷史可以是孤兒? – 2010-10-06 19:14:38
我永遠不會允許歷史行成爲孤兒。如果您需要強制執行活動記錄的唯一性,那必須在觸發器中完成。 – HLGEM 2010-10-06 19:34:24
很棒的回答。我認爲這絕對取決於案件。一些表格將保持非常小,不應該需要單獨的表格。我不認爲每個表都有歷史表是不錯的做法。 – Eric 2010-10-06 16:19:14