我项目中的一些人似乎认为使用一个共同的开发数据库,每个人都连接到它是最好的。我认为它不是,每个开发人员拥有自己的数据库(定期更新数据转储)是最好的。我是对还是错?您是否在这些方法中遇到任何问题?
答案 0 :(得分:5)
磁盘空间和CPU应该足够便宜,以便每个开发人员都可以运行自己的数据库实例,并在版本控制下进行自动构建。这需要允许开发人员大胆地攻击数据库,与其他任何开发人员同时进行黑客攻击无关。
当然,需要注意的是,他们对其私有实例所做的任何更改对其他任何人都无用,除非可以在构建过程中自动应用它。因此,需要有一个坚定的政策,即应用程序代码不能依赖于任何数据库状态,除非该状态由版本控制的,经过单元测试的DDL 更改表示。
有关将数据库定义视为项目代码的另一部分以及协调更改和重构的理论和实践的出色指南,请参阅Scott W. Ambler和Pramod Sadalage撰写的Refactoring Databases: Evolutionary Database Design。
答案 1 :(得分:4)
我喜欢拥有自己的数据库副本以进行开发,因为它可以让您灵活地快速更改内容,而不必担心它会如何影响其他人。
然而,如果所有开发人员都在攻击他们自己的数据库副本,那么最终将每个人的工作合并在一起变得越来越困难。
我认为通过让开发人员在日常开发中使用本地副本,您可以充分利用这两个方面,但每个开发人员应该可以定期将他们的工作合并到一个通用副本中。编写大量单元测试也有帮助。
答案 2 :(得分:0)
我们在所有开发人员中共享一个数据库(20多个),但我们已经将其结构化,以便每个人都有自己的表。
如果您正确构建应用程序,则每个开发人员不需要单独的数据库。它应该是可配置的,它使用哪个数据库或表前缀,以便您可以在实例之间轻松移动它(单元测试,系统测试,验收测试,生产,灾难恢复等)。
使用单个数据库的优点是维护成本是摊销的。你没有让你的DBA试图处理很多数据库(或者,如果你是一个小型数据库商店,你没有让每个开发人员在开发时更好地利用他们自己的数据库)。
答案 3 :(得分:0)
单点失败并不是件好事吗?
答案 4 :(得分:0)
我更喜欢单个共享数据库。但它非常依赖于情况和正在开发的应用程序。
对我有用的东西可能不适合你。跟着你的直觉去吧。
答案 5 :(得分:0)
如果您正在使用Hibernate或任何基于休眠的平台,您可以配置在启动服务器时创建的数据库(create-drop选项)。在向类添加新属性时,这非常有用。如果是这种情况,每个开发人员必须拥有自己的数据库副本。
如果您根本不更改数据库结构,则可以使用单个共享数据库。 在这第二种情况下不是必须的。我更喜欢拥有自己的DB,我可以随心所欲地做任何事情。另一方面,请记住,一些查询可能会占用大量时间,如果您共享数据库,这将影响整个团队。