Process 什么';您在开发团队中处理数据库模式更改的过程是什么?

Process 什么';您在开发团队中处理数据库模式更改的过程是什么?,process,database-schema,Process,Database Schema,这里有一个关于如何在开发团队中处理数据库模式更改的更一般的问题 我们是一个开发团队,开发过程中使用的数据库在每个人的盒子上本地运行,因为我们希望避免需要一直访问web。因此,在某个地方运行单个中央数据库实例并不是一个真正的选择 每当我们中的一个人决定是时候扩展/更改db模式时,我们都会发送数据库文件(MYI/MYD)或SQL文件以供执行,或者在电话上向其他人指示他们需要做什么才能在本地DBs上运行更改后的代码。这肯定不是一个完美的方法。当新版本准备好后,我们需要在登台或生产上调整DB模式时,也会

这里有一个关于如何在开发团队中处理数据库模式更改的更一般的问题

我们是一个开发团队,开发过程中使用的数据库在每个人的盒子上本地运行,因为我们希望避免需要一直访问web。因此,在某个地方运行单个中央数据库实例并不是一个真正的选择

每当我们中的一个人决定是时候扩展/更改db模式时,我们都会发送数据库文件(MYI/MYD)或SQL文件以供执行,或者在电话上向其他人指示他们需要做什么才能在本地DBs上运行更改后的代码。这肯定不是一个完美的方法。当新版本准备好后,我们需要在登台或生产上调整DB模式时,也会出现同样的问题

我在想。。。你们是怎么处理这类事情的?对于源代码,我们使用SVN

非常感谢你的意见

谢谢,
Michael

至少您应该将数据库中所有对象(表、存储过程等)的脚本置于源代码管理之下


我不认为邮寄模式更改对于专业开发团队来说是一个真正的选择。

我以前的一个团队中有一个系统,这是我在处理这种情况时遇到的最好的系统

应用程序的夜间构建包括数据库(SQL Server)的构建。数据库已构建到测试数据库服务器。然后,每个开发人员都有一个DTS包(这是很久以前的事了,我相信他们升级到了SSIS包)来将每晚的DB构建拉到他们的本地DB环境中


这将主副本保留在一个位置,并使开发人员有责任保持其本地开发人员数据库的更新。

我们过去使用的一种方法是为数据库编写整个DDL脚本,以及所需的任何测试/设置数据。将其存储在SVN中,然后当发生更改时,任何开发人员都可以撤销更改,删除数据库,并从脚本文件重建它。

在我的工作中,我们处理的是相当大的数据库,生成这些数据库非常耗时,因此对我们来说,从头开始使用新的数据库并不理想。像Harper一样,我们在SVN中有DDL。此外,我们在数据库表中存储一个版本号。每次更改DB的签入都必须附带以下脚本:

  • 将升级数据库架构并适当修改任何现有数据,以及
  • 将更新数据库中的版本号
  • 此外,我们对脚本和数据库版本进行编号,以便我们编写的脚本知道如何沿着分支进一步升级,或者如何在没有开发人员任何输入的情况下(除了数据库名称和升级脚本的目录之外)从较旧的分支升级到较新的分支


    因此,如果我有一份客户4GB DB的一年前版本的副本,我想测试他们的数据如何与我们昨天剪切的版本协同工作,我可以运行我们的脚本,让它处理升级,而不必从头开始,重复每次插入,数据库创建后执行了更新和删除操作。

    我们对数据库架构进行了非SQL描述。当应用程序启动时,它会将所需的数据库模式与实际的数据库模式进行比较,并执行使数据库看起来正确所需的任何ADD TABLE、ADD COLUMN、ADD INDEX等语句


    这并不适用于所有情况;有时,如果更改了架构解析程序无法处理的某些内容,则必须删除数据库并重新创建,但大多数情况下,我们不需要担心它。

    我当然会将数据库架构保留在源代码控制中

    在我目前的工作中,每次模式发生更改时,我们都为更改编写SQL(alter table xyz add column…),并将其放入SVN中。然后,开发人员可以通过运行此脚本来更新测试数据库。这很笨拙,但很管用

    在以前的工作中,我编写了一些代码,在应用程序启动时,这些代码会自动将实际的数据库模式与预期的数据库模式进行比较,如果数据库模式不是最新的,则执行更新。这主要是出于部署的原因:当我们发布软件的新副本时,它会自动更新用户的数据库。但它对开发者来说也很方便


    我认为应该有一些通用的SQL工具来实现这一点。也许有,但我从未见过。

    重复问题?我在好几个地方使用过这种技术,效果很好。作为一种通用技术,它完全是技术不可知论的。我也见过基本数据加载脚本以同样的方式管理,因此远程开发人员可以下载DDL和加载脚本,并拥有一个具有已知条件数据加载的当前数据库,几乎不费吹灰之力即可使用。我们也这样做(尽管我们使用TFS而不是SVN)。我喜欢将脚本存储在版本控制中,因为现在您可以跟踪更改的历史记录了!没有什么比将分支或标签与一组特定的DB脚本关联更好的了。