在源代码管理中管理我的数据库

时间:2010-05-05 19:01:37

标签: .net database visual-studio version-control

当我正在使用一个新的数据库项目(在VS2008中)时,由于我从未开始从头开发数据库,​​我立即开始研究如何在源代码控制中管理数据库(在本例中为Subversion)。 / p>

我在SO上找到了一些信息,包括这篇文章:Keeping development databases in multiple environments in syncOne of the answers in particular指出了一些链接,所有这些链接都有很好的有用信息。

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

这对我有意义(如果我确实正确地阅读了)。但是,如果我遗漏了某些内容,我将非常感谢您提供更正或其他指导。另外,我想问的另一个问题 - 这是否也意味着我应该检查从 mdf ldf 文件创建的文件Visual Studio?

感谢您提供任何帮助和其他见解。永远感激。

5 个答案:

答案 0 :(得分:6)

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

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

在这里,我们不允许开发人员在他们的盒子上有一个单独的数据库(这通常会限制数据库的大小,因为它不是连接到SAN的服务器),而是他们必须对开发数据库起作用。定期从prod刷新(然后运行所有新的dev脚本)以保持数据的正确大小。我认为重要的是你的dev数据库环境尽可能地匹配prod,包括设备配置,数据库的大小等等。没有什么比花费很长时间开发一些在生产上根本不起作用或者必须是生产的东西更令人沮丧的立即取下,因为它太慢了系统。

现在从我的肥皂盒上跳下来。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

答案 4 :(得分:0)

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