2009-08-18 90 views
1

跟踪项目数据库结构变化的最简单方法是什么?如何维护数据库结构的版本控制?

当我改变一些有关数据库的信息时(例如,添加一个新表,向现有表添加一个新字段,添加一个索引等),我希望将其传播给团队的其他成员,并最终生产服务器,以最小的烦恼和努力。

目前,解决方案非常薄弱,需要人们记住做事情,这是一个等待发生的事故。

其他的一切都使用标准版本控制软件(我们的例子中是Perforce)进行管理。

我们使用MySQL,因此理解这些工具会有所帮助,尽管我也有兴趣了解其他地方如何处理这个问题,无论数据库引擎如何。

+0

请参阅: http://stackoverflow.com/questions/115369/do-你的源代码管理你的数据库 http://stackoverflow.com/questions/77172/stored-procedures-db-schema-in-source-control http://stackoverflow.com/questions/308/is-有一个版本控制系统的数据库结构的变化 有重复浮动在附近也是如此。 – 2009-08-18 15:50:14

+0

很多愚蠢包括http://stackoverflow.com/questions/308/is-there-a-version-control-system-for-database-structure-changes – 2009-08-18 15:51:03

回答

1

您可以转储架构并提交 - 并且RCS将负责版本之间的更改。

1

你可以得到一个类似Red-Gate的Sql Compare这样的工具,它允许你指向两个数据库,它会让你知道什么是不同的,并且会为你建立改变脚本。

如果您使用.NET(Visual Studio),您可以创建一个数据库项目并将其检入到源代码控制中。

+0

你需要有Team Edition来做到这一点。 – 2009-08-18 16:33:13

+0

我只有Visual Studio 2008,我可以添加一个数据库项目。你只需要确保你分配了一个数据源。 – 2009-08-18 21:15:51

+0

做Visual Studio“数据库项目”支持MySql还是仅支持MS Sql? – 2013-12-05 23:41:38

1

这已经讨论了很多我认为。无论如何,我真的很喜欢Rails解决这个问题的方法。它有三件事代码:

  1. 版本号
  2. 应用更改的方式(更新一个版本表)
  3. 滚动更改回的方式(将在版本表版本前一个)

因此,每次创建变更集时,都会创建此代码文件,以便在执行时可以回滚或升级数据库模式。

这是代码,您可以在任何版本控制系统中提交。您只提交第一个转储,然后提交脚本。

这种方法的好处是,你可以轻松地分发数据库的变化给客户,而与标准只转储模式和更新的IT方法生成的升级/回滚脚本是一个讨厌

0

在我的公司鼓励每位开发人员将所有数据库结构更改保存到包含模块修订号的文件夹中的脚本文件中。这些脚本保存在svn仓库中。

当应用程序启动时,数据库升级代码会比较当前数据库版本和代码版本以及代码是否更新 - 查看脚本文件夹并自动应用所有数据库更改。

这样,应用程序的每个实例(在生产或开发人员机器上)都会将db升级到其代码版本,并且效果很好。

当然,如果我们找到合适的工具,可以添加一些自动化功能。

0

普芒版本控制:每个对象

独立文件(表,视图等)

当改变表,要diff的CREATE TABLE CREATE TABLE部分。源代码历史记录用于传达故事。您无法对CREATE TABLE和ALTER TABLE进行有意义的比较

尝试对文件进行更改,然后将它们提交到源代码管理,然后将它们提交到SQL数据库。大多数工具很难支持这一点,因为在测试之前不应该提交源代码控制,而且如果不将代码放入SQL中,则无法进行测试。因此,在实践中,您尝试使用SQL Redgate将您的文件与SQL数据库进行比较。如果做不到这一点,你会采取一种严厉的策略,放弃数据库中的所有内容,并将其替换为源代码管理的内容。

更改脚本通常是一次性使用,但存在应用程序,例如wordpress,您需要将架构从1.0移动到1.1,1.1到1.5等。每个应该在源代码控制之下并进行修改(即当你发现脚本中的错误将你从1.0移动到1.1时,你创建了该脚本的新版本,而不是另一个脚本)