2009-05-27 54 views
4

我们是一个小型开发团队(约5人)从不同地点开展开发项目。 我们使用SVN作为代码回购。
我们现在面临的最大问题是我们的数据库模式在我们所有人之间完全不同步。 我虽然有以下选项: 1.解决“中央”数据库。这是一个坏主意,很可能不会发生 2.有一个“关守”开发人员,他将继续使用数据库的版本,并让每位开发人员随时更新这些更改。 3.让每位开发人员将他们的更改检查到DB更改脚本中。这可以很快得到混乱。保持开发人员之间同步的SQL数据库模式

对不起只是提一提,它是一个.NET C#项目

任何想法?

回答

0

您是否考虑过使用Visual Studio Team Database Edition?它可以让你将整个源数据库放到源代码管理中,每个开发人员都可以处理他们自己的更改,然后一旦他们签入,其他开发人员就可以轻松地将这些更改部署到他们自己的工作副本中。

不知道是否有一个SVN插件可以与MSSCCI提供者一起工作 - 但我想应该有一些东西在那里。

+0

好主意..但是这里面有一个讨厌的人说我有关任何与微软源代码控制有关的粗鲁的事情。我从来没有过愉快的时光。 – Neale 2009-05-27 18:47:22

+0

我想你还是可以用SVN来做。应该有一个MSSCCI插件,以便Visual Studio可以直接打你的SVN数据库,而不必使用MS源代码管理产品。 – 2009-05-27 19:10:27

0

假设你没有使用Team Edition的视觉工作室产品,那么我会选择选项3.也有源代码管理下的sql脚本。

保持本地数据库同步与要求它们使用最新源代码无异。

如果您使用的是团队的产品,然后开始使用数据库版本(附带开发版)的源代码控制

+0

它确实是一个.net C#项目 – Neale 2009-05-27 18:48:04

1

这是一个棘手的问题在管理数据库。我们通过修改用于生成模式的SQL来处理它(从Enterprise Architect自动生成)。我们遇到了很多问题,人们不会更新他们的数据库模式,因为他们认为重新创建具有有效测试数据的数据集花费的时间太长。

我们的解决方案是:

  • 添加SQL架构生成到SVN
  • 添加数据插入脚本到SVN
  • 添加架构/数据转储到SVN

我们使用哈德森设置一个自动化的数据库构建,以检查修订版本的变化。它会自动重新创建模式,插入所有数据,导出转储文件,然后将转储文件提交给SVN。

基本上,它归结为运行数据库导入大约需要20秒。一旦您快速创建数据库,开发人员不会经常遇到问题。

0

我也在一个小团队中工作,现在我们已经将我们的SQL模式和数据插入脚本签入存储库,就像我们的代码一样。

您需要确保人们跟上最新的“来源”。我们倾向于认为,对于我们遇到的任何重大更改/修订,无论如何都要讨论它们,以便让所有人知道正在修改的内容,并提供一个机会在数据库更新推出之前查看它们。

0

这个问题没有得到任何更多的常见。每个团队都必须在某个时候提出这个问题。我已经完成了常见的数据库方法和单独的数据库方法。该团队一直回到普通的数据库。这很容易维护,每个人都应该尽早同步,经常同步。这并不否定需要在版本控制中保留模式更改和定义。您需要一个可重复的流程来更新测试,分段和生产环境。纯粹的SQL迁移并不总是足够的,但有时您需要使用您的本机对象来生成数据或做出决定。我见过的最好的系统(类似于我自己构建在perl,php和Java中的系统,但在几点上有所改进)是Ruby on Rails迁移系统。检查出来并做类似的事情。

1

为什么要关闭同一个数据库服务器又是一个坏主意?因为所有的开发人员都在进行可能伤害他人的变化?如果是这样的话,我会让一个人处理模式更改并使用VPN来访问具有数据库服务器的网络。我现在就在这条船上,刚拿起一台思科路由器来处理我低廉的VPN需求(< $ 100)。

1

我读了artile从保罗·格雷厄姆在几年前,关于“敏捷数据库开发”。尽管如此,我仍然遇到了麻烦。似乎所有这些术语都有点过于笼统,我的记忆有点过于模糊,无法靠近。

我acrossed http://code.google.com/p/migratordotnet/

它仿照Rails的ActiveRecord的迁移(前面提到的)运行,但针对.NET。我不是一个.net程序员,但它听起来像是你要找的东西。

1

我们在这个项目同样的问题,我目前的工作中,我们已经采取Tarantino作为工作出奇地好一个解决方案。每个开发人员都在处理本地数据库。当开发人员需要做出架构更改,他/她创建了一个脚本,并检查它。

塔伦蒂诺保持对哪些脚本的每个开发人员已经对他们的本地数据库运行轨迹,并应用新的脚本。因此,如果开发人员A进行更改并检查SQL脚本,则开发人员B将在他/她从源代码控制中获取文件时获得更改。当开发者B在本地运行Tarantino时,只会应用最新的脚本。

当然,这个最可以手动完成。塔伦蒂诺使它更容易,但它并不完美。一个好处是它可以很容易地集成到构建过程中。还可以创建维护数据库中数据的脚本。

1

MS是有点的,因为它没有一个标准的解决方案,这又落后,但你的#3选项(其他城市脚本)是如今走的方式。大多数其他现代主流语言使用这种形式现今在各种不同的口味。例如检查Rails迁移。

This post讨论了一堆第三方.NET解决方案可供选择。根据我的经验,migratordotnet是一个很好的选择。有关该问题的更详细的检查,请查看Martin Fowler的主题article

相关问题