2009-06-06 11 views
12

Quali sono le migliori pratiche per mantenere l'integrità referenziale su più database? dal momento che non ci sono funzioni integrateMantenimento dell'integrità referenziale su più database

Oppure è meglio partizionare un singolo database?

Aggiornamento Vedere l'esempio di kevin di seguito. questa è la mia situazione. Il mio database di inventario ha tabelle che fanno riferimento a employeeId nel database dei dipendenti.

Questi database sono attualmente mantenuti in luoghi diversi (server diverso)

risposta

5

Con 2k05/2k08 è decisamente meglio partizionare un singolo database. Hai tutti i vantaggi di archiviare dati come se fosse in più database pur essendo in grado di utilizzare le funzioni di un singolo database, come le chiavi esterne.

Detto questo, non si dovrebbe tenere tutto in un unico database. Logicamente quando le tabelle dei gruppi non si adattano insieme, normalmente le separo nei loro database. Ad esempio, non necessariamente unire insieme un database di sistema di ordini e il database di gestione dei dipendenti. Suppongo che potrebbero esserci motivi per farlo, ma sono certo che avrai il mio punto di separare logicamente gli archivi di dati laddove appropriato.

Quello che dovresti guardare è quanto i due database interagiscono. Se ci sono molti campi che si unirebbero ai database, direi che probabilmente è una buona idea. Se è forse uno o due campi che si collegano alla tabella dei dipendenti, potrebbe non valere la pena farlo. L'altra opzione è, se il numero di join è piccolo, è quello di duplicare le tabelle necessarie nel database di inventario, soprattutto se si tratta di una tabella e i due database esistenti sono grandi e piuttosto complessi.

+0

che è la mia situazione. Il mio database di inventario ha tabelle che fanno riferimento a employeeId nel database dei dipendenti. Questi database sono attualmente gestiti in posizioni diverse (server diversi) –

0

Immagino che dipende dalle vostre esigenze, ma probabilmente sarei propendere per un singolo database. Per farlo attraverso i database multiplbe è necessario il supporto delle transazioni distribuite.

1

Decisamente meglio partizionare su un singolo DB. Se avessi avuto bisogno di farlo, i trigger avrebbero aiutato (schifo). Non puoi semplicemente partizionare il DB usando invece schemi (il DB di esempio AdventureWorks è un esempio)?

0

È possibile utilizzare i trigger per eseguire il lavoro ma ....
Ho paura che trascorrerai un'enorme quantità di tempo per assicurarti che tutto funzioni. Un singolo database con alcune tabelle partizionate potrebbe essere migliore. Hai davvero bisogno di più database o solo un database con più filegroup distribuiti su dispositivi fisici? Potresti considerare anche questa opzione. Matej

Problemi correlati