寻找数据库版本控制的解决方案

itd*_*per 10 sql-server versioning

问题描述:

在我们的项目中,我们有一个"生产数据库"和许多"开发人员".我们想知道如何管理和安装更改.我们已经有一些程序,但需要花费很多时间,有时会导致错误.

我们不能丢失数据 - 所以我们不能使用"丢弃表".我们只能使用"alter table".

我们实际的"db版本化程序"是这样的:

  • 我们有一个名为[actual_version]的表,其中包含已安装的db模式的实际版本
  • 我们有一个名为"changes_script.sql"的文件,其中包含所有数据库更改 - 此文件存储在SVN上

当开发人员想要在SVN上提交新版本时,他需要通过添加块来更改change_script.sql:

if ([acctual_version].version < "23")) {
    --- sql script ----
updateVersionTo("23")
end if 
Run Code Online (Sandbox Code Playgroud)

当我们想要升级数据库模式时,我们只需"执行"change_scripts.sql

有没有人有更好的主意?

Set*_*son 5

Red Gate的Sql Compare工具可以比较两个表(或两个DDL脚本集合,或一组脚本到表等)并为您生成迁移脚本.

如果你在Ruby工作,你可以查看"Ruby Migrations ",这是一种在代码中进行数据库版本控制的形式化方法.(.NET中有类似的东西,比如RikMigrationsFluent Migrator,我也相信其他平台也存在类似的东西).

正如Randy Minder所说,您也可以使用VS DB Edition来管理您的架构,尽管我认为RedGate工具可以轻松地工作,并且不会将您绑定到特定平台或IDE.


Ran*_*der 1

您听说过 Visual Studio 数据库版吗?如果您当前正在使用 VS Team Suite 或 VS Developer Edition,则可以免费获得。它是一个数据库模式管理工具,可以对模式进行版本控制,允许重构、构建、代码分析和部署。

我们用它来管理我们的数据库模式和部署。很棒的工具。