如何在开发过程中管理数据库?

use*_*154 17 database version-control data-integrity data-integration

我的四人开发团队已经面临这个问题一段时间了:

有时我们需要处理同一组数据.因此,当我们在本地计算机上进行开发时,dev数据库将远程连接.

但是,有时我们需要在db上运行操作,这些操作将依赖于其他开发人员的数据,即我们破坏关联.为此,本地数据库会很好.

是否有解决这种困境的最佳做法?有没有像"数据SCM"工具?

以一种奇怪的方式,在git repo中保留SQL插入/删除/更新查询的文本文件会很有用,但我认为这可能非常快速地变慢.

你们怎么处理这个?

LBu*_*kin 8

您可能会发现我的问题如何从源代码控制构建数据库有用.

从根本上说,有效管理共享资源(如数据库)很难.这很难,因为它需要平衡多人的需求,包括其他开发人员,测试人员,项目经理等.

通常,为个体开发人员提供他们自己的沙盒环境更有效,他们可以在这种环境中执行开发和单元测试,而不会影响其他开发人员或测试人员.这不是灵丹妙药,因为您现在必须提供一种机制来保持这些多个独立环境随着时间的推移彼此同步.您需要确保开发人员有合理的方式来获取彼此的更改(包括数据,架构和代码).这不是必须的.良好的SCM实践可以提供帮助,但仍需要相当程度的合作和协调才能实现.不仅如此,而且为每个开发人员提供他们自己的整个环境副本可能会带来存储成本,以及额外的DBA资源,以帮助管理和监督这些环境.

以下是一些供您考虑的想法:

  1. 创建一个共享的公共"环境白板"(它可以是电子白板),开发人员可以轻松查看哪些环境可用以及谁在使用它们.
  2. 标识要拥有数据库资源的个人或组.他们负责跟踪环境,并帮助解决不同群体(开发人员,测试人员等)的冲突需求.
  3. 如果时间和预算允许,请考虑为所有开发人员创建沙箱环境.
  4. 如果您还没有这样做,请考虑将开发人员"游戏区域"与集成,测试和验收测试环境分开.
  5. 确保版本控制关键数据库对象 - 特别是那些经常更改的对象,如触发器,存储过程和视图.如果有人覆盖别人的变化,你不想失去工作.


tva*_*son 5

我们使用本地开发人员数据库和单个主数据库进行集成测试。我们将创建脚本存储在 SCM 中。一位开发人员负责更新基于“黄金大师”模式的 SQL 脚本。开发人员可以根据需要对其本地数据库进行更改,根据需要从集成数据库中的数据填充,使用导入过程,或使用工具(在我们的例子中为 Red Gate Data Generator)生成数据。如有必要,开发人员可以清除他们的本地副本,并可以根据需要从创建脚本和集成数据中刷新。通常,数据库仅用于集成测试,我们将它们模拟出来用于单元测试,因此最大限度地减少了保持同步的工作量。


bjo*_*sig 5

我建议你看看Scott Allen\xc2\xb4s对此事的看法。他写了一系列博客,在我看来非常出色。\n数据库工作的三个规则、\n基线、\n更改脚本、\n视图、存储过程等、\n分支和合并

\n\n

我或多或少地使用这些指导方针,并进行个人更改,它们确实有效。

\n