Dove lavoro abbiamo un ESB a cui sono collegate 6 diverse applicazioni (o dovrei dire "endpoint") . Queste 6 applicazioni funzionano con 3 diversi schemi Oracle su 2 istanze di database. Alcune di queste applicazioni coesistono nello stesso schema non perché sono correlate ma perché la nostra infrastruttura di database è gestita da un fornitore esterno e ottenere un nuovo schema richiede solo per sempre (inoltre, non abbiamo accesso DBA ovviamente) ... ci vuole davvero tanto tempo che a un certo punto abbiamo pensato di riutilizzare uno schema esistente "temporaneamente" per poter continuare lo sviluppo. Per applicare la "separazione" dei dati, i nomi delle tabelle sono prefissati, ad esempio "CST_" per il cliente. Inoltre, dobbiamo lavorare con uno schema che, per alcune valide ragioni, non possiamo assolutamente cambiare ... È strano, lo so. Naturalmente, come sempre accade, "temporaneamente" è cambiato in "temporar-namently" se sai cosa intendo; -)
Le nostre diverse applicazioni si collegano ai loro rispettivi schemi di database e lavorano con i loro pacchetti PL / SQL e ci vietiamo assolutamente di interagire direttamente con tabelle / dati che si trovano al di fuori del nostro dominio dell'applicazione.
Quando una delle applicazioni connesse all'ESB necessita di informazioni esterne al suo dominio, chiama il servizio correlato sull'ESB per ottenere i dati, anche se tali informazioni sono in effetti nello stesso schema, richiedendo in teoria solo una piccola dichiarazione di join in una delle richieste SQL .
Lo facciamo per poter suddividere il nostro dominio applicativo in diversi schemi / database, e per fare in modo che i servizi dell'ESB funzionino ancora correttamente quando succede (è Natale a breve, stiamo incessantemente le dita)
Ora, questo può sembrare strano e terribile dall'esterno, ma ci sono delle ragioni e volevo solo condividere questa esperienza concreta per mostrarti che uno o più database non è così importante. Aspetta, lo è! , per molte ragioni (+1 per Scott Whitlock, vedi l'ultimo paragrafo sul backup e in modo tale che ti porti nei guai) Ma è altrettanto importante pensare che i tuoi servizi SOA siano correttamente progettato, almeno questa è la mia opinione, e io non sono un DBA. In definitiva, tutti i database appartengono al "datawarehouse aziendale", giusto?
Infine, non riformulerò l'ultimo paragrafo di Scott Whitlock, in particolare questo
I wouldn't separate tables into different physical databases just because of separating concerns.
è davvero super importante. Non farlo se non c'è motivo.