如何对数据库进行版本控制和管理多个分支?

5

警告:问题较长。

[问题]

如果按照下面所描述的方式,每个数据库都有一个分支,并进行版本控制,那么在尝试合并到更少的分支时,如何处理数据迁移问题?

当您尝试合并到更少的分支时,如何管理数据迁移问题?
这只是作为数据迁移的一部分而产生的成本吗?

实质上,在迁移时将不得不创建转换脚本。

是否有更好的方法?
我们可以同时解决这两个问题吗?
什么是最佳实践?

[背景]

在我的工作场所,我们有一个产品,有3个分支。主线拥有“最新和最伟大”的变化,这不一定准备好发布。

  • 版本B(名称已更改以保护罪犯)
  • 版本A(名称已更改以保护罪犯)
  • 主线

由于这些分支,实际上有3个版本的数据库。 代码版本控制相当容易,但数据库版本控制似乎很困难。

阅读您是否对数据库项目使用源代码控制?后,似乎最好的方法是为每个对象/表导出所有创建脚本。 注意:根据文章,如何管理它,是一个大脚本、多个脚本还是混合体,取决于您的喜好。

我同意这一点,并询问为什么不这样做。

目前,数据库管理员拒绝将脚本分支到各个分支中。 除了懒惰作为借口外,原因是为了节省数据迁移时间。 实际上,强制在所有版本中维护数据库更改。

所有脚本都经过版本控制,并仅在主线上维护。 版本A和版本B有自己的特殊文件,指定要在其各自的分支上运行哪些更改脚本。当存在更改脚本时,例如应用于版本A但版本B仅需要部分更改时,开发人员必须通知数据库管理员更新文件,该文件指示要为每个分支应用哪些补丁。对于执行太多手动干预的更改脚本,需要手动应用更改脚本的一部分。

要更新版本A上的数据库,需要使用版本A的补丁应用文件提取所有补丁。

[场景]

  • 存在上述3个版本。
  • 对版本A进行数据库更改。
  • 合并代码从版本B到版本A,以便删除版本B。
  • 数据库也需要进行相同的操作。

希望这有意义。


请问您是否能澄清一下,您的任何数据库脚本目前是否已经进行版本控制?或者您是否计划在未来使用源代码控制来维护多个数据库分支?此外,您的问题是关于如何频繁合并数据库还是只需一次性消除所有分支? - Thomas Jung
我已经在上面澄清了问题所在。似乎现有的版本控制策略只是因为要避免分支,原因我无法理解。我以为我对问题的理解是因为数据迁移有很大的成本。但正如John Saunders在下面所述,这通常在创建更改脚本时就已经考虑到了。感谢大家的帮助。看来正常的版本控制策略最终会起作用。 - Gavin Chin
1个回答

3

感谢提供链接。源代码控制合并确实如您所引用的那样。但是,如果发生了多个数据库更改,并且任何脚本更改都已正确地在分支之间合并,那么该怎么办? 这只是分配给整合更改的人需要投入时间编写转换脚本等的成本,比如几个月后。问题不在于数据库脚本控制,而在于数据迁移成本。有没有什么方法可以解决它?例如为每个数据迁移更改维护一个脚本?我有什么遗漏吗? - Gavin Chin
1
每次模式更改都必须考虑数据迁移。有时,模式更改不需要对数据进行任何更改。有时,它们将需要更改数据。在这种情况下,由这些更改脚本来负责更改数据,无论如何都可以。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接