【问题标题】:Are there generic options for version control within a database?数据库中是否有用于版本控制的通用选项?
【发布时间】:2011-01-25 14:09:02
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我从未找到与 Subversion 一样有效的解决方案,但以下是我所做的一些有用的事情:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我能想到两件事:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-05
            • 1970-01-01
            • 2012-08-10
            • 2017-07-04
            • 1970-01-01
            • 2010-11-10
            • 2011-01-31
            • 1970-01-01
            相关资源
            最近更新 更多