Banco de Dados Compartilhado vs. Arquitetura de Mensagens

Eu estava no bar com um amigo meu ontem e começamos a discutir a arquitetura em uso na empresa em que ele trabalha. A conversa basicamente envolveu os prós / contras de uma arquitetura de banco de dados compartilhada em relação a uma arquitetura de aplicativo independente distribuída - não poderíamos chegar a um consenso e, nesse caso, gostaria de ouvir as opiniões das pessoas sobre os prós e contras das duas abordagens.

Basicamente, a empresa para a qual ele trabalha tem uma grande arquitetura com muitas aplicações diferentes. Alguns aplicativos possuem um único banco de dados compartilhado entre eles. Por exemplo, há 1 aplicativo que fornece uma interface do usuário para os usuários alterarem os dados de referência. Esses dados de referência são usados ​​por outro aplicativo que também acessa os mesmos dados. Acredito que o código seja realmente escrito como bibliotecas compartilhadas (ou seja, ambos os aplicativos usarão um conjunto de códigos comum que é reimplementado para cada um (um tem como uma dependência)).

Há também outros aplicativos com um banco de dados que também é usado por outros aplicativos por conexão JDBC direta com código de acesso a dados (não é comum entre os dois aplicativos - duplicados !! erghh!).

Minha pergunta é sobre os prós / contras dessa arquitetura versus uma arquitetura em que cada aplicativo contém seus dados "mestres" no silo. Se um aplicativo x requer dados do aplicativo, eles usam serviços da Web ou alguma tecnologia de mensagens para receber esses dados.

A abordagem de mensagens introduziria um problema pelo qual os 'códigos' de dados de referência (ou chaves estrangeiras) que são usados ​​dentro do banco de dados de outros aplicativos atualmente precisam ser buscados de outra fonte. Na arquitetura atual, as 'decodifica' para estas podem mudar a qualquer momento e ser refletidas no aplicativo externo imediatamente, em vez de ter que ter uma relação mestre / escravo onde os dados são copiados - ou uma alternativa onde a aplicação x precisa consultar o aplicativo apenas para exibir os valores de decodificação.

Eu tinha lido Enterprise Integration Patterns e, ao mesmo tempo, ele dá alguns exemplos das vantagens das mensagens - não estou tão convencido disso.

Obrigado Iain