在我们的项目中,我们有几个生产数据库和许多开发人员。每个生产数据库代表一些“子项目/本地化版本”。我们使用SQL Server 2008。

因此,我需要使用MS Visual Studio数据库项目制定数据库版本控制策略。我已经阅读了很多有关数据库版本管理和数据库项目的文章,但是我仍然有很多问题:

  1. 开发人员应该如何对数据库项目实施更改? (最佳实践)

  2. 如何生成100%可行的“最新版本”部署脚本而无需人工干预(跳过某些对象,重写一些更改等)?

  3. 如何使用MS Visual Studio数据库项目管理数据更改?我知道前/后的脚本,但我认为它无法解决这个问题。 (例如:我需要将一些表重新映射到另一个表中)。

“理想解决方案”将是:

  1. 开发人员生成并维护数据库[ProductDB]的数据库项目。

  2. 随着新版本,我将数据库项目部署到[ProductionDB],并进行所有必要的更改。

  3. 开发人员更改数据库项目,并编写一些数据操作脚本以进行具体更改。

  4. 随着新版本,我将数据库项目部署到[ProductionDB],并进行所有必要的更改。

因此,最后一个问题: 在上述目的中使用数据库项目还是有人使用类似的方案/解决方案?

PS:我已经阅读以下讨论:

  1. 数据库更改版本控制[关闭
  2. 如何在SVN中版本我的MS SQL数据库?
  3. 寻找数据库版本的解决方案
  4. 是否有用于数据库结构更改的版本控制系统?
有帮助吗?

解决方案

由于您在此处提到的大多数原因,数据库项目可精确使用 -

  1. 开发人员只需查看数据库脚本文件,进行更改并重新检查它们即可。请注意,您将更改.SQL文件,而不是直接在任何开发数据库中存在的对象。因此,如果您需要在数据库表中添加两个列,则将修改此表的创建表脚本,而不是为此表编写一个Alter脚本。

  2. 如果您拥有目标旧版本DB模式 - 您可以将最新文件部署到该数据库中,并且将创建部署脚本(带有必要的更改语句)。有一个项目设置使您可以选择“部署”时是否还应针对DB运行部署脚本。

  3. 部署脚本可以是可交付的可交付的,可针对产品副本进行分别测试,然后作为补丁应用于POD。

关于数据操作脚本,我不太确定,但是出于您提到的所有其他目的,数据库项目都是完美的。

其他提示

您所描述的是数据库项目存在的原因。

回答您的问题:

  1. 这取决于开发人员。您可以在Visual Studio中工作并直接编辑项目文件,也可以在MGMT Studio中编辑数据库的实时副本,并使用schema在VS中进行比较将更改回到项目中。我已经使用了几个月了,发现两个工作正常,尽管我倾向于直接更频繁地编辑项目文件。

  2. 部署项目如果您选中该框首先删除目标数据库,则会生成最新版本。您可以通过在构建过程中致电VSDBCMD来无人干预。

  3. 部署前/后部署脚本是指您所暗示的。一个示例是将所有数据从表中选择到临时表中,并在预部主持下截断,让项目处理模式迁移,然后在Depeploy期间将其添加回。这可能会变得棘手,但是这个问题从来都不容易解决。

希望这可以帮助。

数据问题很难解决。在Red Gate,我们有很多要求 SQL源控制 工具,与VS数据库项目具有相似之处。好消息是,我们正在积极地为此增加支持,并且应该在圣诞节前有一个早期的构建。如果您有兴趣,只需注册以获取早期访问通知 http://www.surveymk.com/s/sqlsourcecontrol_eapsignup 。我们很想获得您的反馈。

您可能想看看开源 BSN Modulestore工具包, ,它试图实现此工作流(实际上它确实做了更多)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top