Building a really DRY infra-structure: sharing a database and models between multiple apps.


I was wondering about database/model sharing between applications. In the previous company I worked, my boss thought that the best way to build a strong application infra-structure (kind of SOA-based) was to have ONE BIG shared database between the various applications. Since the company works with a certain business domain, these applications would all solve problems related to this business domain too, and the database, in theory, would scale up to be the perfect KB for the company, and, also in theory, things could be made very DRY.

These application would all be all web-based. And at the time, they were thinking on using Java (migrating from desktop Delphi to Java/Web).

In the beginning I liked the approach. The idea of having one big database back-end able to serve any application, was the truly integration heaven. Entitites wouldn’t be tied to applications, but instead, be implemented as middleware models, using Spring.

Java is nice, but not very agile. Also, after applying some agile thoughts in this idea, I started to see that it was not very agile at all, and not really suitable to do with Rails (at least not after putting a lot of time thinking about how to do it without messing things).

I can see where this would have potential though. Imagine two similar applications that, in its objects model, both have an Event model. I can see both of these applications using the same database, sharing Events data. Also, the model could be shared between applications via plugins, and additional logic put as needed.

However, I think that it is more trouble that its worth, in the end. Maybe being a little wet, creating two databases, and sharing via websevices as needed would be a more pragmatic approach.

What do you think? Did you have a similar experience?