是否可以使用MS VS Database Project作为数据库版本控制的完整解决方案?

时间:2010-11-09 19:50:50

标签: sql-server visual-studio sql-server-2008 version-control database-versioning

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

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

  1. 开发人员应如何实施 他们改变了db项目? (最佳实践)

  2. 如何生成100%可行 “最新版本”部署脚本 没有人为干预(跳过 一些对象,重写一些变化, 等)?

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

  4. “理想解决方案”将是:

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

    2. 在新版本中,我将数据库项目部署到[ProductionDB]并提供了所有必需的功能 变化。

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

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

    5. 所以,最后一个问题:为了上述目的使用数据库项目还是有人使用类似的场景/解决方案是否可行?

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

      1. Database changes versioning [closed]
      2. How do I version my MS SQL database in SVN?
      3. Looking for solution for database versioning
      4. Is there a version control system for database structure changes?

4 个答案:

答案 0 :(得分:2)

数据库项目正是出于您在此处提到的大部分原因而精确使用 -

  1. 开发人员只需检出数据库脚本文件,进行更改并重新检入。请注意,他们将更改.sql文件,而不是直接更改任何开发人员数据库中的对象。因此,如果需要向数据库表添加两列,则将修改此表的create table脚本,而不是为此表编写alter脚本。

  2. 如果您有目标旧版本DB模式 - 您可以将此项目与最新文件一起部署到该数据库,并创建部署脚本(使用必要的alter语句)。有一个项目设置允许您选择在部署时是否也应该对db运行部署脚本。

  3. 部署脚本可以是针对prod副本单独测试的可交付成果,然后作为补丁应用于prod。

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

答案 1 :(得分:2)

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

回答你的问题:

  1. 这取决于开发人员。您可以在visual studio中工作并直接编辑项目文件,也可以在Mgmt Studio中编辑数据库的实时副本,并在VS中使用模式比较将更改同步回项目。我已经使用了几个月,发现两者都工作正常,但我倾向于更频繁地直接编辑项目文件。

  2. 如果选中此框以首先删除目标数据库,则部署项目会生成最新版本。您可以在构建

  3. 期间通过调用VSDBCMD进行无人干预
  4. 部署前/后脚本仅适用于您提到的内容。一个示例是将表中的所有数据选择到临时表中并在预部署期间截断它,让项目处理模式迁移,然后在部署后将其添加回来。这可能会变得棘手,但这个问题从来都不容易解决。

  5. 希望这有帮助。

答案 2 :(得分:0)

数据问题很难解决。在Red Gate,我们对SQL Source Control工具提出了很多要求,这与VS Database Projects相似。好消息是我们正在积极增加对此的支持,并且应该在圣诞节之前进行早期尝试。如果您有兴趣,只需在http://www.surveymk.com/s/SqlSourceControl_EapSignup注册早期访问通知即可。我们很乐意收到您的反馈。

答案 3 :(得分:0)

你可能想看一下开源bsn ModuleStore toolkit,它试图实现这个工作流程(实际上它也做了更多)。