我正在编写一个使用数据库(目前是MySQL 4)来存储数据的应用程序。
我可能会稍后以更新的形式对此进行更改以添加其他数据。更新应用程序很简单,它基本上归结为用新的程序文件覆盖程序文件。但是,如何更新数据库架构?
数据库是远程的,因此我的应用程序可能存在于多个位置,因此只需在安装程序中转储ALTER和CREATE语句就会导致多次更改,并且我已被明确要求自动解决方案允许使应用程序副本在过渡期内更新,并使模式更新自动化。
我考虑在启动时检查架构以查找缺少的表和列,并根据需要添加它们,但这似乎不是一个干净的解决方案。我还考虑在数据库上放置一些“模式版本”号,但是看不到任何方法来做这个短行的单行表和一个int“Version”列,这似乎也不是一个好方法。 / p>
答案 0 :(得分:5)
我强烈推荐Liquibase。它确实有效 - 我已经使用它并且留下了非常深刻的印象。
基本上,它保留自己的语句日志,并在数据库上运行,只有在尚未运行/需要时才运行它们。它是XML驱动的,允许您使用可选的执行前和执行后语句和条件。您将XML文件检查到源代码管理中,并从构建工具中调用它。它甚至适合推动生产版本。
这很神奇。
答案 1 :(得分:5)
不是滚动自己的系统来对数据库进行版本控制,而是可能值得研究一个能够为您管理它的现有框架。
我使用liquibase并使用maven插件集成到我的构建中。值得一试!
答案 2 :(得分:0)
正如您所建议的那样,添加一个表,用于存储当前版本的数据库模式。然后,您只需在上次架构更新和新版本之间应用更改,并相应地设置新版本号。我这样做是为了更新我们的生产数据库大约300次,它只是有效。