One Database for Every Developer
How many databases run in your teams development environment? One for the complete team? I have seen many places like that, but please tell me: Why? You aren’t working on a shared files system aren’t you? How is a developer supposed to change the structure of that database without interrupting the work of the other developers? And just in case you haven’t noticed: Pretty much every RDBMS vendor offers free versions of their database which can run on a developer machine.
So when you answered the second question above with ‘yes’ you have a task for tomorrow: Make sure every developer has her own database instance (or schema or whatever you need to work independently from the rest of the team). In addition to that: you need an instance for the automatic tests of your Continuous Integration system, one large one for performance and scalability tests, one for manual tests/integration and of course one for production.
And just in case you are now thinking: “Hell how am I supposed to keep all these databases in sync?” You are having a gapping hole in your software development process. I’ll cover that in a different post.






Thanks for the article, I recommend a central RDBMS with a schema for each user+project combination. We use Junit-Tests to test our java code. I use the username [System.getProperty("user.name")] and a project prefix to create a schema on the central RDBMSs and use that schema in the tests. So each developer and of course the build system always use an own instance. I think its not very usefull if every developer has its own RDBMS installed. I don’t want to install, maintain and update a bruch of RDBMSs on my system (and not only because I use osx).
It all depends on the project setup.
Multiple projects per developer, single schema per project and not so database savy developers push toward a central system.
Distributed or mobile teams push toward a local database.
Whatever works best is fine, as long as we agree that every developer has his own schema available.
Our team of around 6-10 devs had a schema each on a central database managed by the DBA.
We switched a few months ago to local Oracle Database instances. It took about a week for the DBA to set everyone up, but the local performance is now better, there is less load on our dev server, and working from home or on a laptop is a breeze.
How about if each developer uses db4o (http://developer.db4o.com) for mocking and tests? (eg. http://community.icburner.com/blogs/vs2010tests/archive/2009/06/30/db4o-poco-repository-using-visual-studio-2010-net-4-0-beta-1-and-asp-net-mvc-1-0.aspx) They can even be kept in sync with dRS (sync technology) which even syncs to/from relational via Hibernate.
Best!
German
Sounds reasonable but can you recomend some version control soft to make this solution complete? Let say you have 5 coworkers and 3 projects – what isnt much – that makes 18 instances and a lot of pain keeping them up to date manually
[...] via Schauderhaft » One Database for Every Developer. [...]
@Krzysztof Kotlarski you wouldn’t need version control if you are setting up the database schema using a system such as migrations in Ruby on Rails. This gives forward and backward movement through the history of the schema. Tie that in with fixtures to pre-populate the database with records and you then have ultimate control