首页 / 知识

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

2023-04-13 13:47:00

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

Testing and Managing database versions against code versions

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

我的问题是使数据库与代码保持一致的提示和技巧是什么?回滚代码怎么办?分支?


数据库中嵌入的版本号很有帮助。您有两种选择:将值嵌入可以查询的表中(允许对多个项目进行版本控制),或者具有可以测试的显式命名对象(例如表等)。

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


在版本控制的文本文件中定义架构对象和参考数据。例如,您可以使用Torque格式定义架构,并使用DBUnit格式定义数据(两者均使用XML)。然后,您可以使用工具(我们编写了自己的工具)来生成DDL和DML,这些DDL和DML将您从应用程序的一个版本迁移到另一个版本。我们的工具可以将(a)先前版本的架构作为输入


您确实确实希望能够拥有一台干净的机器,从源代码管理中获取最新版本,一步构建,然后一步运行所有测试。加快速度使您可以更快地生产出优质的软件。

就像外部库一样,数据库配置也必须在源代码控制中。

请注意,我并不是说所有实时数据库内容都应位于同一源代码管理中,仅足以使其变为干净状态。 (不过,请备份您的数据库内容!)


You should be able to create your database from scratch into a known state.

尽管这样做是有帮助的(尤其是在新项目的早期阶段),但许多(大多数?)数据库将很快变得太大而无法实现。另外,如果您有任何BLOB,那么在为整个数据库生成SQL脚本时将遇到问题。

我肯定对某种数据库版本控制系统感兴趣,但是我还没有发现任何东西。因此,代替解决方案,您会得到我的投票。 :-P


n


While being able to do so is helpful (especially in the early stages of a new project), many (most?) databases will quickly become far too large for that to be possible. Also, if you have any BLOBs then you're going to have problems generating SQL scripts for your entire database.

备份和压缩可以为您提供帮助。抱歉-没有借口不能获得大量要开发的数据。即使只是子集。


我喜欢Django的工作方式。您将建立模型,并且在运行syncdb时它将应用您创建的模型。如果添加模型,则只需再次运行syncdb。每次您进行推送时,让构建脚本执行都会很容易。

当您需要更改已制成的表时,就会出现问题。我认为syncdb不能解决这个问题。这将需要您进入并手动添加表,还需要向模型添加属性。您可能需要对alter语句进行版本控制。但是,这些模型将始终处于版本控制之下,因此,如果需要,您可以在不运行sql脚本的情况下启动db模式并在新框上运行。另一个问题是跟踪您始终需要在数据库中获取的静态数据。

Rails迁移脚本也非常不错。

一个数据库版本控制系统会很棒,但是我真的不知道这件事。


数据库同步步骤应用程序

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢