最近批准的SQL:2011標準中加入的功能,讓你用這樣那樣的問題比你所能前處理好。
並不是說你就可以做你想要的時間舞臺上做些什麼,而沒有得到推出的確是一個相當顯著改善一切。
關於它的良好表現是在http://metadata-standards.org/Document-library/Documents-by-number/WG2-N1501-N1550/WG2_N1536_koa046-Temporal-features-in-SQL-standard.pdf。
注意,這裏只有在他的SQL產品的這些特點合理支持單一的供應商,另外一個也許是工作就可以了,第三個開闢爲他們的客戶投票通道。
也有的www.linkedin.com一個「時空數據」課題組致力於正是你的主題在眼前。
編輯試圖解決「如何實現這一點沒有時間性的資料庫有什麼建議?「
不要只爲您的模型添加一個日期/時間類型列,第一個原因是您給出的,第二個原因是這個解決方案也是新標準提倡的方案,並且它會促進過渡到可以支持新功能的引擎
因此,添加一個開始日期和結束日期/時間列。不要讓它們都爲空。新標準要求使用它的時間特徵。如果最終MIT(時刻)仍然未知,請使用適用時間類型的最高值,例如9999-12-31。
您不需要爲每個「創建單獨的歷史記錄表」屬性「同樣可能有一個「單一的實體表」,保持「整個實體發生的歷史」。缺點是,這將是很難查詢時實際發生變更的一些特殊屬性(因爲你得到新的歷史行的任何更改任何屬性,可能是複製了相同的屬性值的大多數屬性)。 「單一表格」可能是空間的急切消費者,「每個屬性單獨的歷史記錄」可能是查詢CPU時間的急切消費者。這將是一個平衡的行爲,而平衡恰恰取決於你的具體情況。
不要「添加索引‘當前’列」你的表格。首先,當你的引擎擁有它們時,它們不會幫助你轉換到新的特性,其次,Y/N列是非常糟糕的鑑別器,因此非常差的候選索引。我寧願將開始或結束時間添加到索引中,只要需要查詢那些索引,他們可以期望爲「當前」行贏得相同的勝利,併爲非當前行贏得更好的勝利。
至於數據庫的限制,例如在臨時密鑰,並列入時間RI時間段的時間段不重疊的執行,以及你只是完全在你自己的。按照優先級降序將您需要的代碼寫入觸發器或SPROC或應用程序代碼中。
對您更有幫助?
只是要提醒你,我去了沒有歷史記錄表,並使用「從」和我的「實體」的每一行「到」日期的道路。這是我犯的最大錯誤,它把這個項目變成了一場噩夢。它採用了你提到的人員PerformanceDBA的指導,使我能夠理解數據庫的真正含義(即不僅僅是一個對象的存儲桶)。我已經使用更傳統的方法(歷史表/視圖)重寫了該項目,並且在各方面都更好。好吧,沒有太多爭論,但要詳細說明需要大量的文件。 – Mark
這是一個讓我開始改變我如何看待數據庫一般(從視軟件工程師點,到了DBA的角度來看)後: - http://stackoverflow.com/questions/4491173/historical-可審計的數據庫 - 我並不是說這樣做是錯誤的(使用「from」和「to」並且沒有歷史記錄表),但對我而言,它造成了一個大混亂,我永遠不會下降再次路。 – Mark