在过去的几年里,我是唯一一个处理我们为网络项目创建的数据库的开发人员。这意味着我可以完全控制版本管理。我无法继续完成所有数据库工作,我想让其他开发人员进入这个循环。
我们使用Tortoise SVN并将所有存储库存储在内部的专用服务器上。有些客户要求我们不要将我们的真实数据放在办公室服务器上,因此我们只保留可以生成数据库结构的脚本以及创建有用假数据的脚本。其他时候,我们的客户希望我们在开发机器上获得最新信息。
大型开发团队使用什么工作流来处理版本管理和数据库共享。大多数开发人员更喜欢将数据库部署到其开发计算机上的Sql Server实例。我们应该
答案 0 :(得分:6)
在开发源代码树中永远不会有MDF文件。 MDF是部署应用程序的结果,而不是应用程序源的一部分。从发展来源的角度思考数据库是地狱的捷径。
所有开发可交付成果都应该是部署或升级数据库的脚本。任何变化,无论多小,都采用脚本的形式。有人建议使用diff工具,但我认为它们是一个老鼠洞。我支持版本数据库元数据并具有从版本N升级到版本N + 1的脚本。在部署时,应用程序可以检查当前部署的版本,然后运行所有将版本升级到当前的升级脚本。没有脚本可以直接部署当前版本,新部署首先部署数据库的v0,然后进行所有版本升级,包括丢弃不再使用的对象。虽然这听起来有点极端,但这正是SQL Server本身如何跟踪发布之间数据库中发生的各种变化。
作为简单的文本脚本,所有数据库升级脚本都像其他任何来源一样存储在版本控制中,并跟踪更改,差异和签入审核。
有关更详细的讨论和一些示例,请参阅Version Control and your Database。
答案 1 :(得分:2)
选项(1)。每个开发人员都可以拥有自己最新的DB本地副本。 (最新的含义,从最新版本控制的脚本(基本+增量更改+基础数据+运行数据)重新创建。为了使这项工作,您应该能够“一键”在本地部署任何数据库。
答案 2 :(得分:2)
使用Visual Studio Database Edition等工具确实不会出错。这是VS的一个版本,用于管理数据库模式等等,包括对目标服务器的部署(更新)。
VSDE与TFS集成,因此所有数据库架构都在TFS版本控制之下。这成为架构管理的“真理来源”。
通常,开发人员将使用本地开发数据库,并通过将其与VSDE项目中的模式同步来使其模式保持最新。然后,当开发人员对他/她的更改感到满意时,他们会被检入TFS,然后可以进行构建然后部署。
VSDE还支持重构,架构比较,数据比较,测试数据生成等。它是一个很棒的工具,我们用它来管理我们的模式。
答案 3 :(得分:1)
在以前的公司中(在每月迭代中使用Agile),.sql文件被检入版本控制,并且完整构建过程的(可选的)部分是从生产重建数据库然后应用每个.sql文件订购。
在迭代结束时,.sql指令被合并到创建数据库的生成版本的脚本中,并且脚本文件被移出。因此,您只应用当前迭代的更新,而不是直到项目的开头。
答案 4 :(得分:0)
您是否查看过名为DB Ghost的产品?我没有亲自使用它,但它看起来很全面,可能会在你的问题中提供另一种选择作为第4点。