分享到

简介

如果一个项目有多个开发人员参与,那么跟上开发数据库的更改可能具有挑战性。在整个开发团队中同步这些更改可能既繁琐又耗时。当不同的团队成员处理数据库模式或使用来自开发数据库的数据时,这些数据不能反映最新状态,这可能会导致挫败感,并导致可能最终出现在生产环境中的错误。

特别是,以下情况下可能会出现这些问题

  • 开发人员正在处理数据库模式的不同迭代
  • 开发数据库中的数据不能反映模式的当前状态

在本指南中,我们将介绍团队可以使他们的数据库模式和开发数据在团队之间保持最新和同步的一些方法。

在入职期间设置开发数据库

在数据库模式和开发数据的更改可以在团队成员之间共享之前,需要为这些团队成员引导一些初始数据库状态。对于大多数团队来说,这是他们开始从事项目时入职过程的一部分。此过程的复杂程度在很大程度上取决于组织的规模和成熟度及其需求。

对于大多数正在入职的开发人员来说,起点是在本地克隆和安装项目。接下来,他们通常需要连接到开发数据库。新开发人员设置开发数据库的两种最常见方式是

  1. 运行脚本以播种本地开发数据库
  2. 连接到共享的远程开发数据库

这两种方法都有其自身的优点和缺点。

播种本地数据库

播种本地数据库是有益的,因为它减轻了运行远程开发数据库的需求。开发人员可以在开始时更好地控制进入其开发数据库的数据。与使用共享远程数据库相比,他们还可以更轻松地重置数据库。

如果采用这种方法,则需要付出额外的努力来使播种数据和逻辑与当前模式保持同步。如果更改频繁发生,这可能会带来挑战,并可能导致开发人员顺利入职出现问题。

连接到共享的远程数据库

让开发人员连接到共享的远程开发数据库可以减轻在本地填充新开发人员数据库的负担。这可能很有帮助,因为它使初始入职更容易,使开发人员能够更快地提高工作效率。使用共享远程数据库也可能是有益的,因为数据库的更改可以由单个开发人员定期迁移,然后所有团队成员都可以使用这些更改。

使用共享远程开发数据库的缺点是它需要额外的资源来运行,可能会产生额外的成本。此外,如果所有开发人员都针对同一个数据库工作,则很容易覆盖数据。另一个潜在的问题是,如果团队成员异步采用模式更改,带外更改可能会对数据的状态产生负面影响,从而使其难以使用。

持续的数据库更新

无论是本地还是远程,一旦开发人员设置了要使用的数据库,他们都需要持续检查数据库模式的更新,以及数据库本身中的数据。如果团队规模很大且频繁进行更改,则这可能会很困难。

没有一种万能的方法可以让团队成员及时了解模式更改。适合您团队的正确方法取决于具体情况。

以下列表包含一些可以结合使用的方法,以构建您的总体策略,使数据和模式更改在您的团队中保持同步。

使用迁移

在团队环境中使用关系数据库时,至关重要的是使用迁移作为数据库模式更改策略的起点。

数据库迁移是一组工件,通过自动化,可以更改数据库的结构。最简单地说,迁移是一个 SQL 文件,其中包含应用模式更改所需的语句。例如,向数据库模型添加字段可能会生成以下 SQL 文件

ALTER TABLE User ADD bio varchar(255);

虽然此命令可以由单个开发人员在其本地开发环境的上下文中单独运行,但将其作为数据库迁移文件存在,允许团队中的所有其他开发人员通过自动化应用完全相同的更改。

特定的数据库迁移策略在语言和框架之间有所不同。但是,总的来说,它们遵循类似的模式

  1. 更改描述数据库模型的代码
  2. 生成一组迁移文件
  3. 运行迁移以执行语句并使更改生效

通知团队成员更改

使用数据库迁移作为更改策略将有助于使团队成员之间的数据库结构更改保持同步。但是,通知开发人员这些更改可能具有挑战性。

当两个或多个团队成员正在处理数据库模式的同一部分或应用程序的消耗给定模式部分的部分时,这会成为一个问题。这种情况很可能产生合并冲突并导致挫败感。

虽然这种情况最好通过改进团队沟通来解决,但技术可以在一定程度上提供帮助。

Git hooks 可用于在不同时间通知开发人员有关模式更改的信息。例如,可以使用 hook 来检查已经合并并应用到上游的模式更改,然后再允许开发人员推送他们的更改。这可以帮助减轻合并冲突,并使团队更加同步。

可以使用 git-migration-hook 作为起点,将此行为编写成脚本并应用于您团队的特定场景。

自动化数据同步

当数据库模式更改时,整个团队很可能需要重新播种数据库,以使其中的数据遵守新模式。维护种子脚本、分发它并让团队中的每个人以持续的方式应用它可能很乏味。

自动化此过程的一种选择是使用提供数据库之间双向数据同步的服务。虽然这种服务通常用于出于各种目的同步远程生产数据库,但它也可以用于跨团队同步开发数据。这样做允许团队使用他们自己的本地或远程开发数据库,这些数据库会不断更新。此类服务的一个示例是 Azure 的 SQL Data Sync

结论

在团队成员之间保持开发数据库更改同步可能是一项具有挑战性的任务。当团队快速行动并在同一模式上进行协作时,发生冲突的机会很多。

通过引入带有 Git hooks 和其他工具的工作流程来提供自动化,团队可以更轻松地保持模式更改和数据同步。

关于作者
Ryan Chenkie

Ryan Chenkie

Ryan 是一名全栈开发人员,对数据库和 API 特别感兴趣。他是 CourseLift 的创始人,CourseLift 是一个课程托管平台,可帮助作者进行营销和销售。