Oracle
如何跟踪跨多個表的記錄的更改
準確地說,我面臨著使用 RDBMS(Oracle)設計新數據庫的挑戰。在這個數據庫中,將有一個特定的記錄/文件,它可能跨越多個表。
通過盡可能少的重複,我想跟踪對此記錄所做的更改,並提供一種簡單的方法來創建該記錄的更改副本。
我不想要一個總結文本變化的歷史表,因為我希望能夠準確地獲取
document x
它看起來的樣子time t
。但我也不希望每個歷史條目都有完整的副本。是否有最佳實踐或模式來實現這一目標?
我可能知道如何使用策略模仿來解決這個問題
git
,但在我走這條路之前,我想先得到一些意見。
特別是在 Oracle 12c 中,有一個稱為“時間閃回查詢”的新特性正是用於此目的。(其他數據庫中也有類似的特性:DB2、SQL Server、Vertica 等等。)
要啟用時間查詢,您:
- 確保代表您的文件的每個表格都有一對日期,指示特定記錄有效(活動)時的開始日期和結束日期(時間),並且
- 保留歷史記錄,不要更新它們,而是插入新版本的記錄,只更新歷史記錄的結束日期。
然後,您將能夠對看起來很像的表發出查詢
SELECT whatever FROM mytable AS OF some_date
,這將返回在指定日期處於活動狀態的記錄。您可以在此處閱讀詳細說明。