我一直在思考如何將數據版本適用於相對簡單的數據庫我有,並推斷我應該做的事情像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 |
你有沒有想過解決這個問題? – Tim 2010-11-13 07:10:47
唉,不...我已經積累了嚴重的時間在債務在過去12個月:-( – 2010-11-21 23:53:22