开发基于数据库的应用程序的最佳方法是什么?我们可以有两种方法。
- 一个供所有开发人员使用的通用数据库。
- 为所有开发人员提供单独的数据库。
各自的优缺点是什么?哪一个是更好的方法?
编辑:不止一个开发人员应该更新数据库,我们已经在每台开发人员机器上安装了 SqlExpress 2005。
编辑:我们大多数人都建议使用通用数据库。但是,如果其中一位开发人员修改了代码和数据库架构。他尚未提交代码更改,但架构更改已转到公共数据库。它不会破坏其他开发人员的代码吗?
开发基于数据库的应用程序的最佳方法是什么?我们可以有两种方法。
各自的优缺点是什么?哪一个是更好的方法?
编辑:不止一个开发人员应该更新数据库,我们已经在每台开发人员机器上安装了 SqlExpress 2005。
编辑:我们大多数人都建议使用通用数据库。但是,如果其中一位开发人员修改了代码和数据库架构。他尚未提交代码更改,但架构更改已转到公共数据库。它不会破坏其他开发人员的代码吗?
两个都 -
我喜欢在上线之前或进入“正式”测试环境之前测试更改的单个数据库。这是您的开发人员的健全性检查;它与实时系统保持同步,并确保他们始终考虑彼此的变化。规则应该是,如果更改可能会破坏其他内容,则不要在此处进行更改。
当多个开发人员进行更新时,每个开发人员的数据库非常好(甚至是必不可少的)。它允许他们在不破坏其他开发人员的情况下获得他们想要的所有开发灵活性。
关键是要有一个流程来将数据库更改从开发转移到您的实时系统,并坚持您的流程。
共享数据库
个人数据库
我们使用共享开发数据库,效果很好。我们的模式很少以使其向后不兼容的方式发生变化,但偶尔会在我们上线之前发生设计更改,我们只是要求其他开发人员进行更新。
我们确实有单独的开发应用程序 (Web) 服务器,但它们共享相同的数据库。我们的开发人员确实可以选择使用他们自己的数据库,因为他们知道如何设置它,并且有时会这样做,但只是暂时的。对我们来说,标准是共享数据库。
Thought I'd throw this out there, but why not let every developer host their own instance of SQL Server Developer on their desktops and then have a shared server for each of the other environments (development, QA, and prod)? I think even the basic MSDN that comes with Visual Studio Pro (if you opt for it) includes a license for SQL Server Developer.
The developer can work on their desktop without impacting the others and then you can have them move the code to the next shared environment as you see fit (at will, with daily/weekly builds, etc.).
EDIT: I should add that the desktop instance allows developers to do things that he DBAs often restrict on shared environments. This includes database creation, backup/restore, profiler, etc.. These things are not essential but they allow the developer to become so much more productive while reducing the demands they make against your DBAs.
The shared environment is completely necessary for testing - I would not recommend going from desktop to production. But you can add so much by allowing the developers to have 100% control over a given database environment (including isolation from others) with a relatively minor cost.
取决于您的开发、测试和维护周期。还有关于开发团队的规模和位置(当然还有组织)。如果您支持多个版本的数据库,您可能需要更多的环境。
在现实世界中,我发现以下方法相当令人满意:
以下是一些进一步的观点:
如果两个开发人员(两个团队)正在处理可能相互影响的更改,那么他们应该独立完成他们的任务,然后集成/合并和测试。为此,最好有单独的开发环境(除非他们必须一起工作,在这种情况下,我认为他们是同一个团队的一部分;他们仍然可以处理自己的数据库副本并在必要时共享它)
如果他们处理不会相互影响的更改,他们可以在主服务器上工作。或者放在自己的本地数据库副本上。
因此,在一般情况下(当您支持多个系统版本并维护升级脚本时)在本地副本上进行开发具有所有好处,而且没有风险。
如果您可以共享测试用例仍然很棒,因此能够轻松快速地转储/恢复数据库是一个很大的优势。
编辑:
以上所有假设在整个系统的本地机器上拥有一个副本用于测试目的是可行的(大小、性能、许可证等)。
每个开发人员一个,外加一个持续集成和构建服务器来运行单元和集成测试。这给了你两全其美。
一旦数据库更改量达到一定水平,让所有开发人员快速修改单个开发数据库的工作效率就会降低,因为这会迫使开发人员在准备签入之前将更改部署到共享数据库,这意味着代码的其他部分线路可能会不必要地中断。
你到底为什么要为所有开发人员提供一个单独的数据库?所有人都有一个通用数据库,这样表结构一致,sql语句也一致。
我们两者都做:
我们在我所在的地方使用代码生成,并且我们的数据库也被生成。因此,我们在每个开发人员的盒子上都有一个生成数据库的实例。然后我们使用生成的脚本将更改应用到中央测试数据库。如果一切顺利,我们将在发布期间将更改应用到生产数据库。
这种方法的好处在于,当我们的“真实来源”被签入到源代码控制时,所有数据库更改都会在其他开发人员变基和重新生成时自动分发给他们。它对我们很有效。
我会选择解决方案 #1:为所有开发人员提供一个通用数据库。
优点
缺点
至于解决方案#2:每个开发人员一个独立的数据库;
优点
缺点
考虑到上述情况,我会根据您的公司规模建议:
如果您的公司不需要集成测试,那么请进行验收测试,这一步在投入生产之前至关重要。
开发人员拥有自己的数据库的最大问题是:
当你知道你会影响他人时,我认为你会更加小心你所做的事情,这在我的书中是一个加号。
现在共享数据库服务器应该有我们所说的临时数据库,人们可以在其中创建和测试表更改,所以如果他们正在做一些可能需要删除和重新创建表的事情(这应该是一种罕见的情况!),他们可以首先通过将表复制到临时数据库并在那里运行他们的进程来测试该过程,然后当他们确定它可以工作时切换到真实数据库。或者,我们经常在测试特定更改之前将备份表复制到临时数据库,这样如果旧数据出现问题,我们可以轻松地重新创建旧数据。
我认为使用单个数据库没有任何优势。
最好的方法是测试/QA 服务器上的单个数据库和每个开发人员一个数据库(可能在开发人员的本地计算机上)(因此,10 个开发人员使用 10 + 1 个数据库)。
与一般开发相同的方法:每个开发人员在本地机器上都有自己的源代码副本。
此外,多数据库方法简化了版本控制系统中保留数据库模式的过程。我们将数据库创建脚本保存在 SVN 中。
我们正在使用这里描述的方法: http ://www.sqlaccessories.com/Howto/Version_Control.aspx
您可能还想查看Refactoring Databases。除了讨论数据库更改之外,他还讨论了以降低风险的方式从开发到生产的讨论。
简单的回答:
拥有一个开发数据库,如果开发人员想要自己的,他们可以在自己的机器上运行自己的实例。请务必在共享上进行测试/发布。