
Testing and Managing database versions against code versions在开发应用程序数据库时,不可避免地会弹出更改。我发现的技巧是使数据库构建与代码保持同步。过去,我添加了一个构建步骤,该步骤对目标数据库执行了SQL脚本,但是这样做很危险,因为您可能会无意中添加虚假数据或更糟的数据。 我的问题是使数据库与代码保持一致的提示和技巧是什么?回滚代码怎么办?分支? 数据库中嵌入的版本号很有帮助。您有两种选择:将值嵌入可以查询的表中(允许对多个项目进行版本控制),或者具有可以测试的显式命名对象(例如表等)。 发布到生产环境中时,如果发生意外灾难,您是否有回滚计划?如果这样做,是架构回滚脚本的应用程序吗?使用回滚脚本将数据库回滚到以前的代码版本。 在版本控制的文本文件中定义架构对象和参考数据。例如,您可以使用Torque格式定义架构,并使用DBUnit格式定义数据(两者均使用XML)。然后,您可以使用工具(我们编写了自己的工具)来生成DDL和DML,这些DDL和DML将您从应用程序的一个版本迁移到另一个版本。我们的工具可以将(a)先前版本的架构作为输入 您确实确实希望能够拥有一台干净的机器,从源代码管理中获取最新版本,一步构建,然后一步运行所有测试。加快速度使您可以更快地生产出优质的软件。 就像外部库一样,数据库配置也必须在源代码控制中。 请注意,我并不是说所有实时数据库内容都应位于同一源代码管理中,仅足以使其变为干净状态。 (不过,请备份您的数据库内容!)
尽管这样做是有帮助的(尤其是在新项目的早期阶段),但许多(大多数?)数据库将很快变得太大而无法实现。另外,如果您有任何BLOB,那么在为整个数据库生成SQL脚本时将遇到问题。 我肯定对某种数据库版本控制系统感兴趣,但是我还没有发现任何东西。因此,代替解决方案,您会得到我的投票。 :-P n
备份和压缩可以为您提供帮助。抱歉-没有借口不能获得大量要开发的数据。即使只是子集。 我喜欢Django的工作方式。您将建立模型,并且在运行syncdb时它将应用您创建的模型。如果添加模型,则只需再次运行syncdb。每次您进行推送时,让构建脚本执行都会很容易。 当您需要更改已制成的表时,就会出现问题。我认为syncdb不能解决这个问题。这将需要您进入并手动添加表,还需要向模型添加属性。您可能需要对alter语句进行版本控制。但是,这些模型将始终处于版本控制之下,因此,如果需要,您可以在不运行sql脚本的情况下启动db模式并在新框上运行。另一个问题是跟踪您始终需要在数据库中获取的静态数据。 Rails迁移脚本也非常不错。 一个数据库版本控制系统会很棒,但是我真的不知道这件事。 |