【问题标题】:How do you maintain revision control of your database structure?您如何维护数据库结构的版本控制?
【发布时间】:2010-11-20 15:41:14
【问题描述】:

跟踪项目数据库结构更改的最简单方法是什么?

当我对数据库进行某些更改(例如,添加新表、向现有表中添加新字段、添加索引等)时,我希望将其传播到团队的其他成员,并最终传播到生产中服务器,用最少的麻烦和努力。

目前,解决方案非常薄弱,并且依赖于人们记住做事,这是一个等待发生的意外。

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

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

【问题讨论】:

标签: mysql database version-control


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以从 Red-Gate 获得像 Sql Compare 这样的工具,它允许您指向两个数据库,它会告诉您有什么不同,并会为您构建更改脚本。

    如果您使用的是 .NET(Visual Studio),您可以创建一个数据库项目并将其签入源代码管理。

    【讨论】:

    • 您需要有 Team Edition 才能执行此操作。
    • 我只有 Visual Studio 2008,我能够添加一个数据库项目。您只需确保分配了数据源。
    • Visual Studio“数据库项目”支持 MySql 还是只支持 MS Sql?
    【解决方案3】:

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

    1. 版本号
    2. 应用更改的方式(更新版本表)
    3. 回滚更改的方式(将版本表上的版本设置为以前的版本)

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

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

    这种方法的好处是您可以轻松地将数据库更改分发给客户,而使用标准只是转储架构并更新它,生成升级/回滚脚本的方法很麻烦

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

        可怜的版本控制:

        每个对象(表、视图等)的单独文件

        更改表时,您希望区分 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 的错误,则创建该脚本的新版本,而不是另一个脚本)

        【讨论】:

          猜你喜欢
          • 2011-05-18
          • 2011-05-06
          • 2016-06-11
          • 2011-10-15
          • 1970-01-01
          • 2011-02-25
          • 2016-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多