2010-10-07 33 views
0

我在我的數據庫設計中引入了良好的版本控制問題。關係數據庫中的版本控制

讓我們來舉個簡單的例子。一點出租服務。

您有一個表Person (P_ID, Name),表Computer (C_ID, Type)和表Rent (R_ID, P_ID, C_ID, FromData, ToData)

我想能夠改變說用戶名,創建一個新的版本,如果我需要它仍然有舊的東西。

我的目標是在我的網站上有一些類型的系統可以很容易地對錶中的某些記錄進行版本控制。

更多信息:

,要求,我可以釋放一個紀錄爲一個版本我的商業邏輯。我也必須能夠回滾到舊的。原因是我想要導出diffrent版本的數據。

回答

2

你已經發表了一個聲明(你想要進行版本控制),但沒有提出一個問題(確切地說你的問題是什麼)。沒有問題,很難提供答案。

  1. 確定需要進行版本什麼實體:

    在一般情況下,你可以通過提供版本。在這種情況下,聽起來您可能想要對「交易」或「租賃協議」進行版本控制。

  2. 將PK列,版本號列和「originalID」列添加到該實體模型頂部的表中。

  3. 要進行版本控制,請將頂級記錄複製到新PK中,將原始PK放在「originalID」列中並遞增版本號列。複製相關表格,在這些表格中更改FK以匹配新記錄的PK。然後允許用戶修改與記錄的新PK版本有關的記錄。

+0

這是我第一次接觸,但讓我們說有人在那裏改變名稱(在上面的例子中,然後你會在主實體中創建一個新版本,但是名稱表中的更改會破壞舊版本。在你的應用程序中,但是對於每個表更多,它需要更多的應用程序代碼,需要一個更通用的系統 – nickik 2010-10-07 12:32:50

+0

在這種情況下,被版本化的實體是「用戶註冊記錄」,該記錄將具有PK,OriginalPK和VersionID字段,當名稱改變時,你將創建一個新的記錄,新的PK,OriginalPK設置爲「父」記錄上的OriginalPK,並且VersionID增加1.在任何情況下,您都不會複製甚至更新FK返回People表交易(因爲您希望保留與交易相關的用戶註冊的原始「版本」,但是您的用戶界面可能會顯示該用戶有更新的信息。 – 2010-10-07 13:11:39

+0

多數民衆贊成在尋找感謝。 – nickik 2010-10-07 14:39:13

3

跳進解決方案這可能是一個好主意,問,你想達到什麼樣的行爲之前?您是否需要爲某種審計目的進行版本控制,您是否需要版本控制,以便用戶可以回滾更改,您是否需要對某些業務規則進行版本控制,或者是否有其他原因?

一旦你知道了這個答案應該會跳出你。 I.E.,如果審計是您的目的,您可以添加數據庫觸發器並將舊值和新值存儲在單獨的[Audit]表中。

+0

說得好。在提出解決方案之前,始終要定義問題。 – Leslie 2010-10-07 12:04:22

+0

是啊......但我們都已經做到了,猜測這就是爲什麼編碼非常有趣 – Kane 2010-10-07 12:06:10

+0

我在問題中添加了更多信息。 – nickik 2010-10-07 12:25:34

1

您可以創建一個您是通過每天更新後,在主表中的所有字段的數據行的副本填充或插入存儲過程或觸發器更新存檔表。歸檔表將具有其自己的PK和時間戳,用於更改時間。