代码之家  ›  专栏  ›  技术社区  ›  Craig

根据代码版本测试和管理数据库版本

  •  7
  • Craig  · 技术社区  · 16 年前

    开发应用程序时,不可避免地会弹出数据库更改。我发现的技巧是保持数据库构建与代码同步。在过去,我添加了一个构建步骤,该步骤针对目标数据库执行SQL脚本,但这非常危险,因为您可能会无意地添加虚假数据或更糟的数据。

    我的问题是,保持数据库与代码同步的提示和技巧是什么?当您回滚代码时会怎么样?分支?

    7 回复  |  直到 14 年前
        1
  •  3
  •   Josh    16 年前

    数据库中嵌入的版本号很有用。您有两个选择,将值嵌入可以查询的表(允许对多个项进行版本控制),或者有一个可以测试的明确命名的对象(如表或其他对象)。

    当您发布到生产环境中时,在发生意外灾难时是否有回滚计划?如果这样,它是模式回滚脚本的应用程序吗?使用回滚脚本将数据库回滚到以前的代码版本。

        2
  •  1
  •   Craig Walker    16 年前

    您应该能够从零开始创建一个已知状态的数据库。

    虽然能够这样做是有益的(特别是在新项目的早期阶段),但很多(大多数?)数据库将很快变得太大,无法实现这一点。此外,如果您有任何blob,那么为整个数据库生成SQL脚本时会遇到问题。

    我确实对某种数据库版本控制系统很感兴趣,但是我还没有找到任何东西。所以,你会得到我的选票,而不是解决方案。-P

        3
  •  1
  •   Community CDub    7 年前

    您真的希望能够使用一台干净的机器,从源代码管理中获取最新版本,一步生成,一步运行所有测试。这样做可以使您更快地生成好的软件。

    就像 external libraries ,数据库配置也必须在源代码管理中。

    注意,我不是说你所有的实时数据库 内容 应该在同一个源代码管理中,刚好可以进入干净状态。(不过,请备份数据库内容!)

        4
  •  1
  •   Andrew Swan    15 年前

    在版本控制的文本文件中定义模式对象和引用数据。例如,您可以在 Torque 格式和数据 DBUnit 格式(都使用XML)。然后,您可以使用工具(我们自己编写的)来生成DDL和DML,将您的应用程序从一个版本带到另一个版本。我们的工具可以将(a)以前版本的模式和数据XML文件或(b)现有数据库作为输入,因此您总是能够将任何状态的数据库置于正确的状态。

        5
  •  0
  •   mk.    16 年前

    我喜欢姜戈的方式。您构建模型,当您运行同步数据库时,它将应用您创建的模型。如果添加模型,只需再次运行syncdb。每次推送构建脚本时,都很容易做到这一点。

    当您需要更改已经生成的表时,问题就会出现。我不认为SyncDB能处理这个问题。这将要求您进入并手动添加表,还需要向模型添加属性。您可能需要修改那个alter语句。不过,这些模型始终处于版本控制之下,因此,如果需要的话,您可以在不运行SQL脚本的情况下,在一个新的框中启动和运行一个DB模式。另一个问题是跟踪您在数据库中一直想要的静态数据。

    Rails迁移脚本也很不错。

    数据库版本控制系统会很好,但我真的不知道这一点。

        6
  •  0
  •   Iain Holder    16 年前

    虽然能够这样做是有益的(特别是在新项目的早期阶段),但很多(大多数?)数据库将很快变得太大,无法实现这一点。此外,如果您有任何blob,那么为整个数据库生成SQL脚本时会遇到问题。

    备份和压缩可以帮助您做到这一点。抱歉-没有任何借口不能够得到一组好的数据来开发。即使只是一个子集。

        7
  •  0
  •   Christophe Fondacci    14 年前

    将数据库开发置于版本控制之下。我建议看下一步设计师: http://www.nextep-softwares.com/wiki

    它是一个免费的GPL产品,通过将版本信息与SQL生成引擎连接,提供了一种全新的数据库开发和部署方法,SQL生成引擎可以自动计算将数据库的任何版本升级到另一个版本所需的任何升级脚本。任何现有数据库的版本都可以由反向同步控制。

    目前支持Oracle、MySQL和PostgreSQL。DB2支持正在开发中。它是一个功能齐全的数据库开发环境,在该环境中,您总是从存储库中处理版本控制的元素。您可以在开发期间通过简单的同步发布更新,并且可以生成可导出的数据库传递,您可以通过独立的安装程序在任何目标数据库上执行,该安装程序验证版本、执行结构检查并应用升级脚本。

    IDE还为您提供SQL编辑器、依赖关系管理、对模块化数据库模型组件的支持、数据模型图、SQL客户端等等。

    所有的文档和概念都可以在wiki中找到。