在工作中,我们有4人在几个不同的项目合作。 对于每一个项目我们每个人都有一个本地副本,我们的工作,然后有一个发展,分期,并现场部署,我们所拥有的任何分支(我们使用Subversion)一起。 我们的数据库是MySQL的。
所以我的问题是,什么是管理哪个版本的数据库已经于每个调配而成(和开发商的本地副本)的好方法。 现在,每一个变化进入了在名称时间戳,并在该项目下放到一个文件夹中的文本文件。 这不是工作得很好,说实话。我需要一个解决方案,这将有助于跟踪哪些已经被应用其中。
在工作中,我们有4人在几个不同的项目合作。 对于每一个项目我们每个人都有一个本地副本,我们的工作,然后有一个发展,分期,并现场部署,我们所拥有的任何分支(我们使用Subversion)一起。 我们的数据库是MySQL的。
所以我的问题是,什么是管理哪个版本的数据库已经于每个调配而成(和开发商的本地副本)的好方法。 现在,每一个变化进入了在名称时间戳,并在该项目下放到一个文件夹中的文本文件。 这不是工作得很好,说实话。我需要一个解决方案,这将有助于跟踪哪些已经被应用其中。
如果您的数据库很好地映射到一组数据访问对象,可以考虑使用“迁移”。 我们的想法是存储你的数据模型的应用程序代码的步骤,以使每数据库版本向前和向后移动。
我相信Rails的第一次做到了 。
Java有至少一个项目 。
这里是一个.NET迁移库 。
要更改版本,你运行一个简单的脚本,通过所有的向上或向下版本的步骤让你你想要的版本。 它的妙处是,你检查你迁移到同一个源代码库为您的应用程序代码 - 这一切都在一个地方。
也许别人可以建议其他迁移库。
干杯。
编辑:又见https://stackoverflow.com/questions/313/net-migrations-engine和.NET数据库迁移工具综述 (从上面后)。
http://odetocode.com/Blogs/scott/archive/2008/01/30/11702.aspx
上述博客给我们带来了我们现在的数据库版本控制系统。 简单地说,没有DB变化没有更新脚本制作,所有更新脚本是在我们的源代码控制库。
我们只管理架构更改,但也能够/愿意考虑保持在版本控制提供数据的转储为好; 创建这样的文件是使用mysqldump一个非常平凡的工作。
我们的解决方案不同于一点键的方式在博客中提出的解决方案:它不是自动的。 我们必须手工应用数据库更新等。虽然这可以稍微费时,就推迟了一些完全自动化的系统将需要努力的。 有一件事然而我们没有自动化,是数据库版本的软件追踪:这是非常简单,它保证了我们的软件是知道它的对数据库运行的,如果它知道它的工作与模式将只运行。
我们的解决方案中最难的部分是如何从我们的分行更新合并到主干我们。 我们花了一些时间来制定一个工作流程,以解决两个开发人员试图在同一时间,以及如何处理它合并与数据库更新分支的可能性。 我们在版本控制锁定文件的最终解决(问题的文件对我们来说其实是一个表映射软件版本库版本,这有助于我们的手工管理策略),就像你将一个线程的临界区,和开发商谁得到锁进他们的行李箱的更新。 完成后,其他开发人员将能够锁定,这是他们的责任作出必要的脚本进行任何更改,以确保预期的版本冲突等不良朱朱避免。
我们保持我们所有的数据库脚本(数据和架构/ DDL)的版本控制。 我们还保留了更改的中央目录。 当开发人员进行了更改架构/ DDL文件或添加一个脚本,改变以某种方式中的数据,这些文件添加到目录中,与SVN一起提交数。
我们已经把内部的一个小工具,读取目录的变化和通过抓住每个版本中的内容目录和应用他们建立了基于目录的内容大更新脚本。 这个概念是非常相似的DBDeploy工具,我相信最初来自ThoughtWorks的 ,所以你可以利用它。 这将至少给你一个良好的开端,从中点你可以定制的解决方案更直接地适合您的需求。
祝您好运!