【问题标题】:Keeping a database Schema upto date使数据库模式保持最新
【发布时间】:2012-01-23 05:21:34
【问题描述】:

我正在编写一个使用数据库(当前为 MySQL 4)来存储数据的应用程序。

我很可能稍后会以更新的形式对此进行更改以添加更多数据。更新应用程序很简单,它基本上归结为用新的程序文件覆盖程序文件。但是,我该如何更新数据库架构?

数据库是远程的,因此我的应用程序可能存在于多个位置,因此在安装程序中简单地转储 ALTER 和 CREATE 语句会导致多次进行更改,并且有人明确要求我提供一个允许的自动解决方案在过渡期间更新应用程序副本,并自动更新架构。

我考虑在启动时检查架构以查找丢失的表和列,并根据需要添加它们,但这似乎不是一个干净的解决方案。我还考虑在数据库中放置某种“模式版本”编号,但看不到任何方法可以做到这一点,除了一个带有 int“版本”列的单行表,这似乎也不是一个好方法。

【问题讨论】:

    标签: sql schema versioning


    【解决方案1】:

    我强烈推荐Liquibase。它确实有效 - 我已经使用它并且印象非常深刻。

    本质上,它保留自己的在数据库上运行的语句日志,并且仅在尚未运行/不需要时运行它们。它是 XML 驱动的,允许您使用可选的执行前和执行后语句和条件。您将 XML 文件签入源代码管理并从构建工具中调用它。它甚至适用于推动产品发布。

    这很神奇。

    【讨论】:

    • 是的,我可以支持。请参阅下面的答案。
    【解决方案2】:

    与其滚动您自己的系统来对数据库进行版本控制,不如研究一个可以为您管理它的现有框架。

    我使用 liquibase 并使用 maven 插件集成到我的构建中。值得一看!

    【讨论】:

    • 如果您对 xml 不过敏,liquibase 非常适合:P
    • 其实我对XML过敏,但还是值得的
    【解决方案3】:

    正如您所建议的,添加一个表来存储当前版本的数据库架构。然后,您只需应用上次架构更新和新版本之间的更改,并相应地设置新版本号。我这样做是为了更新我们的生产数据库大约 300 次,它确实有效。

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多