我们有一个相当大的数据库架构,它正在发生变化 - 每个应用程序版本都包含应用程序本身,以及根据需要应用于实时数据库的迁移脚本。
Nopw,我们同时维护一个模式创建脚本,我们可以随时使用它来从头开始构建数据库(用于测试目的)。
令我烦恼的是,这似乎是DRY的一个例外 - 如果我在表中添加一个列,我必须创建一个脚本来执行它和进行类似的更改架构构建脚本。
有什么策略可以避免这种情况吗?我想过可能有一个没有动态数据的“参考数据库”,我们可以在安装每个构建后简单地导出。因此,我们创建一个迁移脚本,然后,一旦构建生效,将架构导回到“创建”脚本。
我不相信它会比它取代的过程更多的工作......
答案 0 :(得分:0)
我有同样的问题/担忧/烦恼。我发现遵循DRY的唯一方法的最好方法是使用数据库建模工具(例如CA Erwin,Sybase PowerDesigner),其中完成所有建模工作以构建/维护参考模式。然后,您可以利用该工具的更改管理功能生成diff脚本,该脚本将从执行版本A发布到版本B并自行生成参考实现。
当然,您可能会发现有些地方您没有重复过,但比较工具会显示所有差异,因此您可以吮吸“哦,我必须立即改变”更改回到参考实现。
显然,所有这些 - 差异脚本,参考实现和模型本身 - 然后通过源代码管理得到保护。