2011-12-23 58 views
0

我們在tfs2010上有一個asp.Net vb.net 2008項目。該項目有一個主要分支,對於任何版本,我們都會創建一個最終部署的新功能分支。後期製作部署我們將分支合併回主分支。基於db版本發佈的分支策略

我們現在還添加了一個db項目來管理我們的SQL。問題是如何版本控制差異腳本。數據庫項目包含所有創建腳本,如果我們必須從頭開始部署項目,但該項目已經生效,那麼這很好。因此,現在任何新版本或修補程序通常都會包含更改或更改腳本。

任何想法如何最好地管理創建腳本和每個版本更改腳本?

+1

您需要了解更多關於數據庫項目的信息。這些不是創建腳本,並且您不會錯過任何更改腳本。 –

回答

0

我們多年來一直這樣做的方式是通過使用更新數據庫腳本,它可以將數據庫從特定版本更新到另一個版本。

我們應用了兩種類型的更新腳本:表格更改和數據更改。

表格更改是在手工製作時手動記錄的,它們的設計方式使腳本可以安全地在同一個數據庫上無差錯地多次運行。例如,如果它不在表中,我們只添加一列。此方法允許使用此特定於版本的腳本來應用修補程序以及從一個版本升級到下一個版本。修補程序僅作爲文件末尾的附加條目應用。

這種方法要求開發商紀律,但正確的實施,我們已經能夠更新4次主要的修訂和4年列日到當前版本的數據庫。

對於數據的變化,我們使用的工具從Red Gate,特別是SQL Data Compare

至於數據庫編程(存儲過程,觸發器等),我們保持一個腳本,在執行時,丟棄所有當前的項目,然後重新添加當前的版本。通過對所有可編程元素(存儲過程以s_prefix_開頭,具有fn_prefix_的函數等)使用嚴格的命名約定來啓用此過程。

爲了確保正確的腳本版本的應用,我們增加了存儲在數據庫中記錄數據庫的當前版本的小版本表(通常爲1行)。該表在應用時由表更新腳本更新。我們還更新了應用於從頭開始創建數據庫的腳本中的此表。

最後,爲了應用腳本,我們創建了一個小工具,讀取數據庫的當前版本和指定應用基於數據庫的當前版本哪些腳本清單。

舉個例子:

假設我們有問題的兩個主要版本,3和4,有兩種更新腳本,update_v3.sql和update_v4.sql。我們有一個初始結構腳本tables.sql和一個可編程腳本stored_procs.sql。鑑於這些假設,清單看起來是這樣的:

tables.sql>當版本= 0 update_v3.sql>當major_version < = 3 update_v4.sql>當major_version < = 4 stored_procs。sql> always

該工具將評估當前版本並按清單中指定的順序應用腳本,以確保數據庫始終以已知方式更新。

希望這有助於給你一些想法。