Sql-Server

在 SQL Server 中儲存修訂(很像 TFS)

  • September 25, 2013

所以,到目前為止我得到了什麼:

表:變更集

列:ID | 評論 | 送出者

表:客戶

列:ID | 姓名

表:客戶變更集

列:ID | 客戶 ID (FK) | 變更集 ID (FK)

所以現在我可以在一個變更集中進行多個客戶變更(再次非常類似於 TFS)。現在,客戶對像中的每個變更集都會導致創建一個新的客戶對象(並且由於標識列而分配了一個新的 Id)。

我現在的問題是,我不知道如何表示與客戶之間的映射。我有幾個引用 的表Customers.Id,但這意味著我將引用一個舊版本的客戶(最初的版本,沒有任何更改)。

最好的方法是什麼?

  • 不要在每次簽到時創建一個新客戶?但是我怎麼會得到我需要的邏輯呢?
  • 將所有外鍵更新為我的新Customer.Id? 那需要相當長的時間。

顯然,當您簽入變更集時,根據您對流程的描述,您知道客戶是誰(或曾經是)。甚至 TFS 也需要相同的東西,以便它可以保持歷史記錄。

無論如何,在同一個對象的多個版本中,什麼是不變的?

“名稱”是不變的嗎?(可能不是。)如果客戶表那麼簡單,除了名稱更改之外,我看不到您正在跟踪什麼。但可能該表要復雜得多。

但只要您知道這是同一個客戶,您就應該在新的客戶行中攜帶一個*常量值。*就像是:

Table: Customers
Columns: Id | CustomerNumber| Name

這樣,“Id”只是一個行代理鍵,但 CustomerNumber 將被分配一次,並且將是包含在您正在跟踪的數據版本中的數據。

我認為 CustomerNumber 可能是分配給該客戶的第一個 Id,但我建議使用獨立的編號方案,如果需要公開的話,可能需要校驗數字以防止輸入錯誤。

引用自:https://dba.stackexchange.com/questions/50389