管理大型团队中的Sql Server数据库版本控制

Jus*_*n C 4 sql-server version-control tortoisesvn

在过去的几年里,我是唯一一个处理我们为Web项目创建的数据库的开发人员.这意味着我可以完全控制版本管理.我无法跟上所有的数据库工作,我想让其他开发人员进入这个循环.

我们使用Tortoise SVN并将所有存储库存储在内部的专用服务器上.有些客户要求我们不要将我们的真实数据放在办公室服务器上,因此我们只保留可以生成数据库结构的脚本以及创建有用假数据的脚本.其他时候,我们的客户希望我们在开发机器上获得最新信息.

那么大型开发团队使用什么工作流来处理版本管理和数据库共享.大多数开发人员更喜欢将数据库部署到其开发计算机上的Sql Server实例.我们应该吗

  1. 保留SVN中每个数据库的脚本,并使开发人员在进行微小更改时导出新脚本
  2. 在完成更改后分离数据库并将MDF文件提交到SVN
  3. 将所有开发副本放在内部网络上的服务器上,并强制开发人员通过远程桌面进行连接以进行修改
  4. 我没有想到的其他一些选择

Rem*_*anu 6

从不在开发源代码树中有MDF文件.MDF是部署应用程序的结果,而不是应用程序源的一部分.从发展来源的角度思考数据库是地狱的捷径.

所有开发可交付成果应该是部署或升级数据库的脚本.任何变化,无论多小,都采用脚本的形式.有人建议使用diff工具,但我认为它们是一个老鼠洞.我支持版本数据库元数据并具有从版本N升级到版本N + 1的脚本.在部署时,应用程序可以检查当前部署的版本,然后运行所有将版本升级到当前的升级脚本.没有脚本可以直接部署当前版本,新部署首先部署数据库的v0,然后进行所有版本升级,包括丢弃不再使用的对象.虽然这听起来有点极端,但这正是SQL Server本身如何跟踪发布之间数据库中发生的各种变化的原因.

作为简单的文本脚本,所有数据库升级脚本都像其他任何源一样存储在版本控制中,并跟踪更改,差异和签入审核.

有关更详细的讨论和一些示例,请参阅版本控制和您的数据库.