我们的项目有大约20个开发人员,但我们的应用程序相对较少使用数据库.我们有大约5个数据库的集合,所有这些数据库都非常小,每个数据库的表少于20个,其中没有数百个行或任何大的数据库.
我们在桌面上有两个选项可用于管理数据库随时间的演变:
>某种工具.目前,我们正在使用Visual Studio数据库项目,其中包含模式的当前定义,并查看参考数据库以生成diff脚本.然后,我们使用此diff脚本使参考数据库保持最新.
>使用版本脚本从基线构建数据库.脚本手动放置在源代码管理中.将数据从旧列/表移动到新数据的任何数据迁移都将是这些脚本的一部分. DB中某个版本会记录一个版本,升级会在DB版本和当前版本之间运行所有脚本.
第二种选择似乎被广泛使用,我在这里找到了一个深入的讨论:http://odetocode.com/blogs/scott/archive/2008/01/31/versioning-databases-the-baseline.aspx
我们现在遇到的问题是我们无法访问我们的生产数据库.这意味着要创建一个发布包,我们必须将Production的备份恢复到另一个位置,针对该参考数据库生成差异并将脚本提供给生产数据库团队.因此,我们的生产发布与我们的其他环境不同.
这使得运行版本化脚本的想法很有吸引力,因为我们在所有环境中使用相同的脚本,并且在部署中没有临时工作(例如,将prod手动恢复到参考DB).但鉴于我们有这样一个小规模的数据库情况,我觉得我们很难成为数据库工具的困难案例.我们想要的是尽可能简单易懂的东西.
RedGate套件之类的工具是否适合这种情况,或者我们应该使用版本化的脚本吗?成本并不是一个问题,它更多的是创建一个成功的坑,维护和部署数据库是尽可能基本和自动化.