数据库中是否有版本控制的通用选项?

时间:2010-03-09 19:08:44

标签: mysql sql-server version-control relational-database

我在开发项目中使用SVN的经验很少,而且我对关系数据库的经验也很少。我知道像表和SQL语句这样的基本概念,但我远不是专家。

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

他们的任何通用解决方案是否可以添加这种功能而不依赖于实际的数据库架构?我对使用MySQL或MS SQL Server的解决方案感兴趣。

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  1. 创建将创建架构并填充任何初始数据的脚本。然后为每个更改生成更新脚本。这是一个相当手动的过程,但它的工作原理。还有一些额外的东西可以帮助您将当前版本号存储在数据库的表中,并确保脚本为idempotent

  2. 将完整的开发数据库存储在Subversion中。如果有大量数据或经常更改,这对我来说通常不会很好。但在某些项目中可行。

答案 2 :(得分:0)

我能想到两件事:

  • http://www.liquibase.org/ - 提供了一种通常管理数据库更改的方法。创建提交到源代码管理中的文件,它有助于管理不同开发数据库之间的更改等。
  • http://www.viget.com/extend/backup-your-database-in-git/ - 这描述了将数据库备份到源代码控制中的策略,但是只能在架构上使用相同的策略。在此方案中,数据库将与主代码位于不同的区域。 (这也可以与其他源控制系统一起使用。)

答案 3 :(得分:0)

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