2010-05-05 118 views
8

由于我正在处理一个新的数据库项目(在VS2008中),而且我从未从头开发过一个数据库,因此我立即开始研究如何在源代码管理中管理数据库(在此案例,Subversion)。在源代码管理中管理我的数据库

我发现了一些关于SO的信息,包括这篇文章:Keeping development databases in multiple environments in syncOne of the answers in particular指向一些链接,所有链接都有很好的有用信息。

我正在阅读K. Scott Allen的series of posts,它描述了他如何管理数据库更改。从我的阅读中(请原谅我的问题的无差别),似乎数据库本身从未被检入到存储库中。相反,可以构建数据库的脚本以及测试数据(也可以从脚本填充)被检入到存储库中。最终,这意味着,当开发人员测试他或她的应用程序时,这些脚本(构建过程的一部分)将运行。这可以确保数据库是最新的,但也可以从每个开发人员的计算机本地运行。

这对我有意义(如果我确实正确阅读)。但是,如果我错过了某些东西,我会很感激更正或附加的指导。此外,我想问另一个问题 - 这是否也意味着我应该检查mdfldf从Visual Studio创建的文件?

感谢您的帮助和其他见解。永远感激。

+0

我可以问一下你最终选择哪种方法吗?你是否开发数据库从生产中退出(确保'好'的测试数据),还是将数据作为构建过程的一部分进行填充? – 2010-07-01 09:03:12

+1

@David - 目前我们将我们的开发数据库作为构建过程的一部分进行填充。在这一点上,我们不需要模仿数据的大小(我们将确保在以后这样做)。这可能是短视的(同样,我第一次这样做),但是,目前我没有可用的服务器,我只能用于开发数据库,​​所以我受限于资源可用性。 – JasCav 2010-07-01 12:49:42

+0

所以,如果我理解正确,你没有使用生产数据库,因为你的服务器不能容纳这将需要的大小?或者还有其他原因? – 2010-07-01 16:24:28

回答

6

这是正确的,你应该检查脚本而不是数据库文件本身。

我不喜欢从测试数据构建,除非数据本身会模仿生产数据的大小(或者,在新数据库的情况下,有意使用)。为什么?因为针对具有100条记录的表编写代码并不会告诉您它是否会在您有10,000,000条记录时及时运行。我认为太多的糟糕的设计选择是由那些认为小数据集可用于开发的人所做出的。

在这里,我们不允许开发者在他们的盒子上有一个单独的数据库(通常限制数据库可以通过不作为连接到SAN的服务器的大小),相反他们必须针对开发数据库定期从prod刷新(然后运行所有新的开发脚本)以保持数据的大小。我认为您的开发数据库环境尽可能匹配产品非常重要,包括设备配置,数据库的大小等。没有比花费很长时间开发更令人沮丧的事情来开发一些根本无法用于产品或必须的产品立即取消,因为它太慢了系统。

现在跳下我的肥皂箱。

+1

@HLGEM - 关于测试数据的好处。其中一篇文章实际上指出了这一点。 – JasCav 2010-05-05 19:50:19

1

我使用DataConstructor,但我有偏见,因为我写了它。

2

检查脚本是个好主意,因为源代码控制最适合使用文本文件而不是二进制文件。作为与数据库更改相关的其他代码更改的一部分,可以轻松查看脚本文件中的差异。除了检入数据库脚本之外,我们还检入数据库模式快照。此数据库模式快照允许我们验证生产中的模式是否与给定版本的产品的预期模式相匹配。除此之外,数据库模式快照是使用纯文本编辑器搜索列和表的便捷方式。

0

你可以使用一个工具,如Liquibase管理数据库脚本。它实际上是一个数据库升级框架,因此它将跟踪已经执行的步骤,因此,例如,当您要升级生产时,它只执行新的步骤。