2011-12-23 95 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

该工具将评估当前版本并按清单中指定的顺序应用脚本,以确保数据库始终以已知方式更新。

希望这有助于给你一些想法。