【问题标题】:Branching strategy for release based db project基于发布的数据库项目的分支策略
【发布时间】:2011-12-23 12:57:29
【问题描述】:

我们在 tfs2010 上有一个 asp.Net vb.net 2008 项目。该项目有一个主分支,对于任何版本,我们都会创建一个最终部署的新功能分支。后期生产部署我们将分支合并回主分支。

我们现在还添加了一个数据库项目来管理我们的 SQL。问题是如何对差异脚本进行版本控制。 db 项目包含所有创建脚本,如果我们必须从头开始部署项目但项目已经上线,这很好。因此,现在任何新版本或修补程序实际上通常都会包含更改或更改脚本。

任何想法如何最好地管理创建脚本和每个版本更改脚本?

【问题讨论】:

  • 您需要了解有关数据库项目的更多信息。这些不是创建脚本,您不会错过任何更改脚本。

标签: sql vb.net visual-studio-2008 design-patterns


【解决方案1】:

我们多年来一直这样做的方式是使用更新数据库脚本,该脚本可以将数据库从特定版本更新到另一个版本。

我们应用了两种类型的更新脚本:表更改和数据更改。

表更改是在进行时手动记录的,并且其设计方式使得脚本可以安全地针对同一个数据库多次运行而不会出错。例如,我们仅在表中不存在列时才添加该列。这种方法允许使用此特定于版本的脚本来应用修补程序以及从一个版本升级到下一个版本。修补程序只是作为文件末尾的附加条目应用。

这种方法需要开发人员遵守纪律,但如果实施得当,我们已经能够将经过 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 当 major_version 总是

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

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

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2021-07-25
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多