Project management 请建议一种更好的方法来组织开发数据库

Project management 请建议一种更好的方法来组织开发数据库,project-management,Project Management,我目前正在从事一个web项目,在这个项目中,我们都连接到一个开发数据库 和其他集中式系统一样,随着时间的推移,这个数据库变成了单点故障 如果其中一个开发人员不小心将一些脏数据转储到数据库中,那么所有其他开发人员都会受到影响 所以我想也许我们应该做点什么,比如说,我们每个人都复制一份原始数据库,然后设置我们的web应用程序来连接到本地数据库 在我的例子中,团队的核心成员是五名开发人员,一名测试人员(主要是黑盒测试)。开发过程是这样进行的:每个开发人员负责一个子功能并在自己的分支上工作,然后我们将他

我目前正在从事一个web项目,在这个项目中,我们都连接到一个开发数据库

和其他集中式系统一样,随着时间的推移,这个数据库变成了单点故障

如果其中一个开发人员不小心将一些脏数据转储到数据库中,那么所有其他开发人员都会受到影响

所以我想也许我们应该做点什么,比如说,我们每个人都复制一份原始数据库,然后设置我们的web应用程序来连接到本地数据库

在我的例子中,团队的核心成员是五名开发人员,一名测试人员(主要是黑盒测试)。开发过程是这样进行的:每个开发人员负责一个子功能并在自己的分支上工作,然后我们将他的分支合并到测试人员测试应用程序的主干上


请给我一些建议。

让每个人都从各自的数据库副本开发的问题是,他们不会接受其他开发人员的更改

例如,如果有人向数据库表中添加了一列,其他开发人员将不会意识到这一点。其他人也可能无意中添加相同的列

而且,如果有人以需要更改应用程序代码的方式更改存储过程(例如,添加输入参数),其他开发人员将不知道这一点。如果他们从源代码管理中获得更新的代码,它将无法在本地数据库副本上工作

我同意开发数据库越来越混乱是一个问题。但我不确定从数据库的多个副本进行开发是否会减少开发问题的数量


我知道您可能无法使用的一种替代方法是定期将生产数据库复制到开发。通常,这只能在新版本发布后发生,该版本对生产数据库模式进行了所需的任何更改。但要做到这一点,您必须有一个生产数据库。

在我的项目中,开发数据库始终位于开发人员的本地计算机上。我们使用SQL Server Developer Edition或SQL Server Express。我们保留了一个SQL脚本,用于在源代码存储库中创建签入数据库。任何需要重新创建本地数据库的人都可以使用此功能。一名团队成员负责维护SQL脚本,任何数据库更改都首先由他负责(通常作为SQL脚本)。他从SCM获取脚本的最新版本,更新其本地副本并生成更新的创建脚本,该脚本将替换SCM中的脚本。同时,伴随的代码更改被检入SCM,以便代码和数据库同步。其他所有人都同步到此版本

这使人们可以自由地并行工作,并根据需要进行模式更改,包括可能会放弃的实验更改。我们还使用本地DB作为web应用程序本地测试的虚拟数据源——不是单元测试,我们通常为此模拟DB,而是集成和UI测试。保持本地数据库的独立性允许每个开发人员根据需要为其测试进行设置,而无需与其他人进行任何协调


我还应该提到,一旦协调器的本地数据库处于正式的签入版本,我们就使用SQLCompare来传播周围的更改。这是删除和重新创建数据库的一种替代方法,可以更好地保留现有数据。根据数据库的变化,这可能是一个简单的操作,也可能是有点复杂的操作。我们总是使用它来更新QA/测试和生产数据库,除非这些更改非常小,可以手动进行(没有错误)。

个人本地SQLite数据库呢。许多Rails开发人员都对该解决方案感到满意

对于我的公司来说,一个非常有效的解决方案是在虚拟机中为每个开发人员运行一个数据库


我们为支持的每个数据库(oracle、db2、mssql、mysql)设置了一个虚拟机。现在,每个开发人员都可以简单地在本地复制和运行虚拟机,而无需安装它。

我发现花时间建立一个系统非常有用,在这个系统中,每个开发人员都有自己的数据库,每次运行单元测试时,都会刷新、重建并填充测试数据。这样,你们就永远不会成为对方的绊脚石。当然,持续集成和测试服务器也应该有自己的数据库

只要DDL和测试数据处于版本控制中,每个数据都是针对同一个数据库工作的。另一个优点是,如果我正在开发一个需要更改DB的特性,那么每个人都可以获得更改所需的代码和DDL+测试数据


在JavaSphere中,DbUnit与HibernateMaven插件一起非常有帮助。当然,一个简单的自制解决方案也可以

我们使用的基本流程与其他人在这里描述的大致相同,但有一些重大变化。每个开发人员通常都有自己的db实例,我们使用更改脚本来管理它。详情如下:

  • 我们有一个基本数据库脚本来创建初始数据库。这包括在数据库中创建一个表,用于跟踪数据库的模式版本
  • 所有SP、视图和函数都编写到单独的文件中
  • 如果需要更改模式,可以编写一个脚本来进行更改。它必须检查schema version表,以确保db处于应用此架构更改的正确版本。诸如RedGate工具之类的工具对编写这些脚本有很大帮助,但它们不是必需的
  • 我们有一个我们编写的小程序,可以根据数据库自动运行所有这些脚本。它将检查数据库的当前架构版本,并仅运行新的架构更改脚本。它将始终运行所有SP、view等脚本
  • 它在某些点上变得有点马虎