5

我在开发项目中使用 SVN 的经验很少,而我在关系数据库方面的经验也很少。我知道表和 SQL 语句等基本概念,但我远非专家。

我想知道的是是否有任何通用的版本控制类型系统,如 SVN,但它适用于数据库而不是文件。我想要与 SVN 相同的功能,例如创建分支、创建标签和合并分支的能力。与其将修订号与文件存储库的版本相关联,不如将其与数据库的版本相关联。

他们是否有任何通用的解决方案可以添加这种独立于实际数据库模式的功能?我会对与 MySQL 或 MS SQL Server 一起使用的解决方案感兴趣。

我还应该澄清我正在尝试对数据而不是模式进行版本控制。我希望架构保持不变。所以真的,我似乎想要一种方法来创建所有 INSERT、UPDATE 和 DELETE 请求的日志,这些请求在每个数据版本之间发送到数据库。这样,任何版本都可以通过重新发送已保存到所需版本的所有 SQL 语句来重新创建。

4

4 回答 4

1

您可以将所有 DDL、存储过程等编写成常规文本文件。

然后,您可以简单地使用 SVN 进行数据库版本控制。

于 2010-03-09T19:12:38.527 回答
1

我从来没有找到一个和 Subversion 一样有效的解决方案,但这里有一些我做过的有帮助的事情:

  1. 制作将创建架构并填充任何初始数据的脚本。然后为之后的每个更改制作一个更新脚本。这是一个相当手动的过程,但它确实有效。还有一些额外的帮助,例如将当前版本号存储在 db 的表中并确保脚本是idempotent

  2. 将完整的开发数据库存储在 Subversion 中。如果有很多数据或经常更改,这通常对我来说效果不太好。但在某些项目中是可以工作的。

于 2010-03-09T19:15:20.320 回答
0

我能想到的有两点:

  • http://www.liquibase.org/ - 提供一般管理数据库更改的方法。创建提交到源代码控制的文件,它有助于管理跨不同开发数据库等的更改。
  • http://www.viget.com/extend/backup-your-database-in-git/ - 这描述了一种将数据库备份到源代码控制中的策略,但同样的策略可以只在模式上使用。在此方案中,数据库将位于与您的主代码不同的区域。(这也可以与其他源代码控制系统一起使用。)
于 2010-03-09T19:12:41.233 回答
0

我在我的版本控制系统中保留并维护创建脚本。

于 2010-03-09T19:12:42.110 回答