根据代码版本测试和管理数据库版本
-
09-06-2019 - |
题
当您开发应用程序时,数据库的更改不可避免地会出现。我发现的技巧是让数据库构建与代码保持同步。过去,我添加了一个针对目标数据库执行 SQL 脚本的构建步骤,但这很危险,因为您可能会无意中添加虚假数据或更糟的情况。
我的问题是保持数据库与代码同步的提示和技巧是什么?当你回滚代码时怎么办?分枝?
解决方案
数据库中嵌入的版本号很有帮助。您有两种选择,将值嵌入到可查询的表中(允许对多个项目进行版本控制),或者拥有可以测试的显式命名对象(例如表等)。
当您发布到生产环境时,您是否有应对意外灾难的回滚计划?如果这样做,是否是架构回滚脚本的应用?使用回滚脚本将数据库回滚到以前的代码版本。
其他提示
您应该能够从头开始将数据库创建为已知状态。
虽然能够这样做很有帮助(特别是在新项目的早期阶段),但许多(大多数?)数据库很快就会变得太大而无法实现。另外,如果您有任何 BLOB,那么您在为整个数据库生成 SQL 脚本时就会遇到问题。
我确实对某种数据库版本控制系统感兴趣,但我还没有找到任何东西。所以,你得到的不是解决方案,而是我的投票。:-P
您确实希望能够使用一台干净的机器,从源代码控制中获取最新版本,一步构建,并一步运行所有测试。加快速度可以让您更快地开发出优秀的软件。
就像 外部库, ,数据库配置也必须在源代码控制中。
请注意,我并不是说您所有的实时数据库 内容 应该处于相同的源代码控制中,足以达到干净的状态。(不过,请备份您的数据库内容!)
我喜欢 Django 的做法。您构建模型,当您运行syncdb时,它会应用您创建的模型。如果添加模型,您只需要再次运行syncdb。每次您进行推送时,构建脚本都会很容易执行。
当您需要更改已经制作的表格时,问题就出现了。我不认为syncdb 可以处理这个问题。这将需要您进入并手动添加表,并向模型添加属性。您可能想要对该 alter 语句进行版本控制。不过,模型始终处于版本控制之下,因此如果需要,您可以在新机器上启动并运行数据库模式,而无需运行 sql 脚本。另一个问题是跟踪数据库中始终需要的静态数据。
Rails 迁移脚本也非常好。
数据库版本控制系统会很棒,但我真的不知道这样的事情。
虽然能够这样做很有帮助(特别是在新项目的早期阶段),但许多(大多数?)数据库很快就会变得太大而无法实现。另外,如果您有任何 BLOB,那么您在为整个数据库生成 SQL 脚本时就会遇到问题。
备份和压缩可以帮助您。抱歉 - 没有理由不能获得一组好的数据来进行开发。即使它只是一个子集。
将您的数据库开发置于版本控制之下。我建议看看 neXtep 设计器:http://www.nextep-softwares.com/wiki
它是一款免费的 GPL 产品,通过将版本信息与 SQL 生成引擎连接起来,提供了一种全新的数据库开发和部署方法,该引擎可以自动计算将数据库的任何版本升级到另一个版本所需的任何升级脚本。任何现有数据库都可以通过反向同步进行版本控制。
目前支持 Oracle、MySql 和 PostgreSql。DB2 支持正在开发中。它是一个功能齐全的数据库开发环境,您始终可以在存储库中处理版本控制的元素。您可以在开发过程中通过简单的同步来发布更新,并且可以生成可导出的数据库交付,您可以通过独立的安装程序在任何目标数据库上执行该交付,该安装程序验证版本、执行结构检查并应用升级脚本。
该 IDE 还为您提供 SQL 编辑器、依赖关系管理、对模块化数据库模型组件的支持、数据模型图、SQL 客户端等等。
所有文档和概念都可以在 wiki 中找到。