在資料庫中加入時態表

黃家瑞 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指定歷史異動資料表。

執行以下語法:


可以看到以下的執行結果


如果想回朔到之前的時間點,可以利用以下的語法


結果如下:


利用時態表可以掌握到資料表歷來的異動紀錄,可以用最小的效能成本取得最大的效益。




您可在下列課程中了解更多技巧喔!