在資料庫中加入時態表
黃家瑞 Jerry Huang
- 精誠資訊/恆逸教育訓練中心-資深講師
- 技術分類:資料庫
時態表是SQL Server 2016新增的功能。SQL Server中有幾項功能可以記錄歷史異動,最早是從Change tracking(CT)、Change Data Capture(CDC)一直到現在的時態表(Temporal Table)。有些專案必須記錄某些資料的異動,過去企業可能使用CDC,或是第三方軟體,而今天可以使用時態表(Temporal Table)。
時態表(Temporal Table) 是一種使用者資料表,其設計目的是要保留資料變更的完整歷程記錄,以方便進行時間點分析。這種類型的時態表稱為系統版本設定的時態表(System-Versioned Table),因為每個資料列的有效期間是由系統管理 (也就是資料庫引擎)。
每個時態表皆有兩個明確定義的資料行,分別各具 datetime2 資料類型。這些資料行稱為Period Column。每當修改資料列時,系統會獨佔使用這些期間來記錄每個資料列的有效期間。
除了這些期間資料行之外,時態表也包含另一個具有鏡像架構之資料表的參考,稱為歷程記錄表(History Table)。系統會使用歷程記錄資料表,在時態表中的資料列每次更新或刪除時,自動儲存舊版的資料列。在時態表建立期間,使用者可以指定現有的記錄資料表,或讓系統建立預設記錄資料表。
時態表大致有以下的功能:
- 稽核所有資料變更並視需求執行資料鑑識
- 重新建構過去任何時間的資料狀態
- 計算一段時間的趨勢
- 維護決策支援應用程式的緩時變更維度
- 從資料意外變更與應用程式錯誤中復原
以下建立一個時態表
時態表不提供圖形介面,僅能由T-SQL建立,在上圖Period columns中必須加入兩個datetime2資料型別的欄位,並利用PERIOD FOR SYSTEM_TIME指定。
另外以WITH語法HISTORY_TABLE=dbo.EmployeeHistory指定歷史異動資料表。
執行以下語法:
可以看到以下的執行結果
如果想回朔到之前的時間點,可以利用以下的語法
結果如下:
利用時態表可以掌握到資料表歷來的異動紀錄,可以用最小的效能成本取得最大的效益。