您如何版本/跟踪对SQL表的更改?


16

在每个人都在对本地表和开发表进行更改的开发人员团队中工作时,如何使所有更改保持同步?每个人都保留其sql更改的中央日志文件?一个Wiki页面,用于跟踪alter table语句,开发人员可以运行以将其本地db更新到最新版本的单个.sql文件?我已经使用了其中一些解决方案,并且希望获得一个可以一起工作的好的可靠解决方案,因此,感谢您的想法。

Answers:


4

我使用基于代码的数据库迁移工具,并将迁移代码保留在源代码管理中。

通过将时间戳记用作版本号,大多数数量的开发人员都可以随意随意添加迁移,我们可以放心地对数据库的任何副本运行迁移工具。

我曾经在版本控制下使用SQL脚本,但是发现基于代码的方法要容易得多,因为它们都位于一个逻辑“点”中,并且能够用一个命令执行所有需要的脚本。


4

我自己没有做,但是一些开发人员在源代码控制下维护了一组SQL脚本,这些脚本在执行时可以重新创建数据库表以进行测试,并为生产目的建立一个空数据库。

当需要添加或删除字段或表,或者需要进行数据转换时,可以使用相同的技术在客户站点上对数据库进行版本控制。


3

在版本控制和持续集成下构建脚本以对其进行验证

对我有用的一种方法是让每个开发人员使用他们自己的架构,他们可以按照自己的意愿进行工作。他们的模式是可破坏的,并填充了由所有开发人员贡献的版本控制脚本集中的测试数据。

每晚进行的持续集成构建采用了所有脚本的最新版本,并尝试从中构建一个内聚的测试数据库。然后,该应用程序进行了一系列集成和功能测试,以验证当前架构是否与当前发行候选版本一致。

在走这条路之前,已经进行了相当扎实的数据库设计,并且DBA始终密切注意事情,以防止开发人员对非规范化和其他恐怖感到发狂。

版本控制在这里非常有用,因为对脚本的更改很明显。我们还利用数据库VERSION表来识别数据库的整体状态。这是一个简单的整数序列,未链接到任何特定的应用程序。

总体而言,它运行良好,意味着开发人员不再担心更改持久性层,因为他们可以始终回滚自己的模式而不影响其他模式。


2

如果您在MS商店中,Visual Studio 2010提供了一些不错的数据库版本控制工具,该工具还可以根据两个数据库之间的差异生成更改/部署脚本。


2

除了将模式和其他SQL脚本保持在版本控制下之外,另一种便捷的做法是在实际的DB中维护“模式版本”表

create table schema_migrations (
    `appliedAt` timestamp not null default CURRENT_TIMESTAMP,
    `migrationCode` varchar(256) not null,
    `extraNotes` varchar(256),
    primary key (`migrationCode`)
)


1

我使用的方法是为参数提供一张表。该表将具有数据库所在版本的一个名称/值对。这给我带来了两个好处:我有一种方法可以验证仅通过应用程序应用了修补程序的数据库,并且可以将该值用于SQL脚本。

SQL脚本将创建新表,更改列,以及数据库上进行任何工作以从以前的版本升级脚本。理想情况下,我还会有一个回滚脚本,但是大多数时候我没有。

顺便说一句,作为Ruby on Rails的一部分,这种完整的方法已经自动化,并带有回滚脚本。我喜欢这样的想法,但并非所有框架都能做到这一点。当我不使用Ruby on Rails时,我使用上面概述的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.