2009-05-06 99 views
1

我一直在思考如何將數據版本適用於相對簡單的數據庫我有,並推斷我應該做的事情像Jim T's post那裏有全球修訂#分別被提及(例如像在Subversion或Mercurial中),每個數據庫記錄都有一個有效期間。關係型數據庫和版本控制:修訂間隔

例子:

創建人。

|Name|D.O.B |Telephone|From|To | 
|Fred|1 april|555-29384|1 |NULL| 

更新電話號碼。

|Name|D.O.B |Telephone|From|To | 
|Fred|1 april|555-29384|1 |1 | 
|Fred|1 april|555-43534|2 |NULL| 

刪除弗雷德:

|Name|D.O.B |Telephone|From|To | 
|Fred|1 april|555-29384|1 |1 | 
|Fred|1 april|555-43534|2 |2 | 

是否有缺點這種方法?這似乎並不複雜。

我能想到的唯一的事情就是它似乎對主鍵有一些微妙的影響,而不是自動增加的記錄號碼,這個號碼是獨立的,與數據無關。例如,如果你有這樣的數據:

Person: (primary key = PersonID which is an autoincrementing integer) 
|PersonID|Name|Telephone| 
|1  |Fred|555-2938| 
|2  |Lois|555-2939| 
|3  |Jim |555-1000| 

Home: (primary key = HomeID which is an autoincrementing integer) 
|HomeID|Address  | 
|1  |123 Elm St. | 
|2  |456 Maple Ave.| 

PersonHome: (primary key = person ID and home ID) 
|PersonID|HomeID| 
|1  |1  | 
|2  |1  | 
|3  |2  | 

,那麼你不能只是增加從和到上述領域,因爲你破壞了主鍵的唯一性。相反,我可能會不得不做這樣的事情(加入適當的指數,以取代之前的主鍵的功能):

Person: (primary key = K which is an autoincrementing integer) 
|K|PersonID|Name  |Telephone|From|To | 
|1|1  |Fred  |555-2938 |1 |NULL| 
|2|2  |Lois  |555-2939 |1 |1 | 
|3|3  |Jim  |555-1000 |1 |NULL| 
|4|4  |Sunshine |555-2000 |1 |2 | 
|5|2  |Lois  |555-1000 |2 |NULL| 
|6|4  |Daisy May|555-2000 |3 |NULL| 
|7|5  |Connor |   |5 |NULL| 

Home: (primary key = K which is an autoincrementing integer) 
|K|HomeID|Address  |From|To | 
|1|1  |123 Elm St. |1 |NULL| 
|2|2  |456 Maple Ave.|1 |NULL| 
|3|3  |789 Vista Dr. |1 |3 | 
|4|3  |104 Vista Dr. |4 |NULL| 

PersonHome: (primary key = K which is an autoincrementing integer) 
|K|PersonID|HomeID|From|To | 
|1|1  |1  |1 |NULL| 
|2|2  |1  |1 |1 | 
|3|3  |2  |1 |NULL| 
|4|4  |3  |1 |NULL| 
|5|2  |2  |2 |NULL| 
|6|5  |2  |5 |NULL| 

Revisions: (comments here for illustration) 
|Revision|Comments              | 
|1  |Initial dataset            | 
|2  |Lois divorced Fred and moved in with Jim      | 
|3  |Sunshine changed her name to Daisy May       | 
|4  |Daisy May's house was renumbered by the fire dept for 911 rules| 
|5  |Lois and Jim had a baby named Connor       | 
+0

你有沒有想過解決這個問題? – Tim 2010-11-13 07:10:47

+0

唉,不...我已經積累了嚴重的時間在債務在過去12個月:-( – 2010-11-21 23:53:22

回答

1

思考同樣的問題嘍!

的從|構建具有當你想添加記錄的新版本需要更新和插入的缺點。我也擔心這個構造有雙重含義,它會告訴你這個版本,例如x | null表示最近的,並且它告訴你記錄狀態,例如x | x表示刪除。

歷史智慧建議使用日期http://www.dbforums.com/database-concepts-design/1641734-data-record-versioning-how-implement.html

使用日期是不是當你拉你的數據到你的對象模型最巧妙的事情。

最近兩個表的做法已經被青睞Database - Data Versioning

我不是這種過於激烈或者由於需要保持重複表。

如果您修改您的解決方案有一個版本欄和狀態欄將這項工作?最高版本號是最新版本,記錄狀態是最新版本。

還在琢磨......