Considera un ambiente in cui disponiamo di un unico database principale, con molti sistemi separati che utilizzano questo unico database.
Questo porta a tutti questi sistemi hanno una dipendenza comune, che alla fine introduce l'accoppiamento tra di loro.
Ciò significa che non possiamo sempre evolvere i sistemi indipendentemente l'uno dall'altro. Le modifiche strutturali al database (anche se sono intese solo per un particolare sistema) richiedono un test completo di TUTTI i sistemi e potrebbero richiedere che altri sistemi vengano "riparati" e successivamente rilasciati.
Questo è particolarmente complicato quando vuoi avere team separati che lavorano su diversi progetti.
Che cosa è un buon "modello" per aiutare ad evitare tale accoppiamento?
Immagino che un database dovrebbe essere affidato esclusivamente ad un sistema. Se altri sistemi richiedono dati per qualsiasi motivo, dovrebbero richiedere tali servizi da un tipo di servizio API.
Un inconveniente di questo approccio che viene in mente è la prestazione: il routing dei dati tra sistemi ad alta velocità attraverso le chiamate di servizio è molto più lento rispetto a una connessione di database.