如何保持代码库和数据库架构同步?

时间:2009-01-15 05:49:42

标签: database visual-studio orm tfs schema

最近,在我正在开展的一个项目中,我们一直在努力保持解决方案的代码库和相关的数据库架构同步(Database = SQL Server 2008)。

数据库更改定期发生(添加列,约束,关系等),因此人们从源代码控制中获取“获取最新”并不常见 发现他们也需要重建数据库(有时他们忘记做后者)。

我们没有使用VSTS:Database Edition(DataDude),而是使用带有脚本(批处理文件)的标准Visual Studio数据库项目,该脚本从T-SQL脚本中删除并重新创建数据库。解决方案是.Net&使用LINQ to SQL底层的ASP.net解决方案作为ORM。

任何人都有关于采取(自动或不自动)方法的想法,这将使每个人都了解最新的数据库架构?

与MSBuild的持续集成是一个选项,但只能帮助获取所提交的任何重大更改,它在我上面强调的方案中并没有真正帮助。

我们正在使用Team Foundation Server,如果这有帮助..

8 个答案:

答案 0 :(得分:4)

我们尝试从创建脚本开始。

,除非脚本已经过测试并检查到源代码管理中,否则不会对数据库进行更改。

但是这假设数据库团队与您的应用团队集成,而在大型项目中通常不是这样......

(我很想“很难”回答这个问题)

编辑:如果您的流程不正确,工具将无法帮助您。

答案 1 :(得分:2)

好吧虽然它不是整个解决方案,但你应该在应用程序代码中包含一个断言,该断言链接到数据库以断言正在使用的正确模式,这种方式至少会变得明显,并且你避免了无声的bug和人抱怨说东西突然疯了。

对于架构版本,您可以使用一些特定于数据库的功能(如果可用),但我个人更喜欢声明架构版本表并保留版本号,这样便携式并且可以使用简单的select语句进行检查

答案 2 :(得分:1)

查看DB Ghost - 您可以在几秒钟内使用脚本编写器创建dbp,然后使用更改管理器管理所有数据库代码。 www.dbghost.com

这正是DB Ghost旨在处理的问题。

答案 3 :(得分:0)

我们基本上按照您的方式执行操作,同时将生成脚本检入源代码控制。我是指定的数据库主人,所以对脚本本身的所有更改都是通过我完成的。人们向我发送他们所做更改的脚本,我更新我的架构主副本,运行生成脚本(SSMS)以生成新的DB脚本,然后检查它。我保持我的代码副本与任何其他地方正在做出的改变。我们是一家小商店,所以这对我们来说非常好。我意识到它可能无法扩展。

答案 4 :(得分:0)

如果您没有使用Visual Studio数据库专业版,那么您将需要另一个工具,可以将数据库分解为其基本部分,以便它们可以更容易管理和更改。

如果您想要保持所有数据库更改和更新的合理性,我建议认真考虑Redgate's SQL tools

答案 5 :(得分:0)

使用RedGate SQL Compare之类的工具在任何给定版本的数据库之间生成更改架构。然后,您可以将该文件检入源代码控制

答案 6 :(得分:0)

看一下这个问题:dynamic patching of databases。我认为它与您的问题相似,可以提供帮助。

答案 7 :(得分:0)

我对这个问题的解决方案很简单。将所有内容定义为XML,并确保从此XML生成数据库,ORM和UI,没有例外。这样,您可以使用代码生成工具快速重新生成数据库创建脚本,这将改变您的架构(希望)保留一些数据。这需要付出一些努力,但最终结果非常值得。