5

存在哪些选项来管理数据库脚本并为数据库进行新开发:

例如,许多应用程序使用的数据库,并且有许多开发人员使用数据库,什么是保持数据库最新的最佳选择,以及将更改部署到生产的过程应该是什么

我看到两个选项:

  1. Microsoft Visual Studio 有一个数据库项目,因此所有数据库脚本都应添加到项目中,并且可以从 Visual Studio 重建数据库
  2. 从备份还原数据库并仅将新脚本应用于数据库

还有哪些选择?我如何管理数据库开发,最佳实践是什么?我上面写的选项有什么优点和缺点?如何维护新的sql脚本?

我知道应该使用源代码控制系统,但是使用 DB 脚本并不像使用应用程序那么容易。

我相信这不会是通用的解决方案,但至少我对 DB 开发人员认为它是如何在贵公司实施的很感兴趣。

4

3 回答 3

3

目前我们使用 SVN 并有一个“UpgradeScripts”文件夹,所有开发人员都将他们的脚本提交到该文件夹​​。

每个脚本都有一个格式为 upg_yyyymmddhhmmss_ScriptName.sql 的生成前缀 - 因此,当它们被部署时,它们会以预定义的顺序运行;保持数据库一致。

这是通过以下 SQL 生成的,并通过预提交挂钩强制执行:

select 'upg_' + convert(varchar, SYSUTCDATETIME(), 112) 
    + replace(convert(varchar, SYSUTCDATETIME(), 8), ':', '') 
    + '-'  
    + 'MeaningfulScriptName'

我们使用的另一个方便的技术是确保静态数据和非静态数据之间的区别是清晰的;所以在我们的数据库中有一个标准的“dbo”模式——它表示可以在环境之间改变的非静态数据,还有一个“静态”模式。此模式中的所有表都有静态 id,因此开发人员知道他们可以在枚举中使用它们并在脚本中引用 id。

如果您正在寻找更正式的东西,Red Gate 有一个名为SQL Source Control的实用程序。

或者您可以考虑使用数据层应用程序框架

于 2012-04-10T21:03:02.483 回答
3

Liquibase是恕我直言最好的工具。它的方法非常简单,这也是它运行良好的原因之一。

您可以在网站上阅读它的工作原理,但基本上它会创建和管理一个简单的表,该表存储每个脚本的哈希以确定它是否已运行脚本。还有 pre-和 post- sql,你可以绕过条件......它几乎可以完成你想要或需要的一切。它还具有 Maven 集成,因此它可以无缝地成为您构建的一部分。

我在一个大型(8 个开发人员)项目中非常成功地使用了它,现在我不会使用其他任何东西。

而且它是免费的!

于 2012-04-10T22:52:23.137 回答
1

我们使用DBGhost对数据库进行版本控制。创建当前数据库的脚本(连同源代码)存储在 TFS 中,然后使用 DBGhost 生成增量脚本以将环境升级到当前版本。DBGhost 还可以为任何静态/参考/代码数据创建增量脚本。

它需要从传统方法转变思想,但这是一个很棒的解决方案,我推荐的再多也不为过。虽然它是第 3 方产品,但它可以无缝融入我们的自动化构建和部署过程。

于 2012-04-10T22:43:12.007 回答