[英]DataModel for Implementing row versioning in OLTP system
我有下表
人員(PID,名稱,Dob,AddressId) PID是代理密鑰(自動遞增)
地址(地址標識,線1,線2,城市,州)代理鍵的地址標識 (自動遞增)
我的許多交易表中都使用了PersonID(PID)。 由於一個人的地址可能會隨時間變化,因此我需要將記錄版本存儲在數據庫中,以便可以根據時間段引用正確的版本。 我應該如何處理。
我正在考慮解決這樣的問題
如下假設人的初始記錄
Person(100, X, Y, 110)
Address(110, A, B, C, D, 2011-01-01, 9999-12-31, Y, 2011-01-01)
現在,地址在2012年更改為PID100。我正在考慮這樣做
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - INSERT
Address(110, A, B, Q, D, 2012-06-01, 9999-12-31, Z, 2012-06-01) - UPDATE
如果2014年 PID 100的地址再次更改。
Address(740, A, B, Q, D, 2012-06-01, 2014-06-01, Y, 2012-01-01) - INSERT
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - NO CHANGE
Address(110, A, B, N, D, 2014-06-01, 9999-12-31, R, 2012-06-01) - UPDATE
現在,我可以查詢歷史數據以及同一表中的當前數據,而無需更改代理鍵。 我將不必引用歷史表,因此不會轟炸邏輯和表。
假設我的地址代碼是唯一的,這種方法不會讓我對表實施唯一的鍵約束。 我該如何處理?
請為此提出不同的方法和反饋。
我要做的是制作一個包含日期的關系表:
Person_At_Address(PID,AddressId,StartDate,EndDate,LastUpdatedBy,LastUpdatedDate)
並從Person和Address產生中刪除相應的列:
Person(PID, Name, Dob)
Address(AddressId, Line1, Line2, City, State)
現在,每當有人更改地址時,您只需在Person_At_Address表中插入新行。 查詢時,您已經獲得了有關歷史數據和當前數據的所有信息。
至於NO-CHANGE行的情況,您有很多選擇可以將其拉出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.