2011-08-25 128 views
1

通常,数据库的模式将随时间而改变。在构建之间,可能会发生零到多个模式更改。捕捉这些变化的“最佳实践”是什么?数据库升级方法

例如,假设2个开发人员正在开发一个项目并使用git进行源代码管理。他们同意在星期五有一个建设。每个工作都在进行,检查更新到当前模式的数据库迁移脚本的更改。当A人获得B人的变化时,他们如何才能轻松知道要运行哪些升级脚本?当一个人在服务器上查看数据库时,他们怎么知道他们在哪个版本上?如果数据库捕捉到版本号,那意味着在星期五,团队中的一个人不得不对其他人说:“好吧,每个人都检入,然后我将编写一个脚本,将版本号更新为下一个版本号版本并检查它。“

有没有一种标准的方法来解决这个问题?谢谢。

回答

1

考虑为每个数据库[结构]更改编写一个迁移,而不是每个系统的稳定版本。就像修改代码一样:每次更新都会更新系统并增加它的修订版本(不是版本)。

通常我们将数据库修订(以及“公共”版本)存储在一个特殊的表格中。有时我们会存储应用于此数据库的迁移脚本的名称,但这是更复杂的解决方案。在文件名中应用迁移之后,可以方便地修改数据库。迁移脚本的最后一行更新迁移版本的特殊表格。

要确定要将哪些迁移应用于混凝土开发人员的数据库,只需采用修订版本号高于存储在特殊表中的数据库修订版的所有迁移。

+0

感谢您的回复。假设你有两个开发人员同时工作,他们都对数据库进行了更改,因此都必须创建一个迁移脚本。他们应该如何知道哪个版本的数据库?他们不能只是做一个“之前的版本号加1”,因为他们可能会得到相同的数字。 – skaz

+0

我们在版本控制下存储数据库模型并在进行更改时保留锁定,使用建模工具自动生成迁移脚本,因此您描述的情况是不可能的。您还可以使用源代码管理锁定来进行并发更改сщтыусгешмую – artplastika