2010-01-19 15 views
34

Ho provato a creare una chiave esterna in una delle mie tabelle, facendo riferimento a una colonna di una tabella in uno schema diverso.Riferimento chiave esterna alla tabella in un altro schema

Qualcosa del genere:

ALTER TABLE my_schema.my_table ADD (
    CONSTRAINT my_fk 
    FOREIGN KEY (my_id) 
    REFERENCES other_schema.other_table(other_id) 
) 

Da quando ho avuto le sovvenzioni necessarie, questo ha funzionato bene.

Ora mi chiedo se ci sono motivi per non fare riferimento a tabelle in uno schema diverso o qualcosa su cui prestare attenzione?

risposta

32

Nessun problema. Lo schema non ha davvero alcun impatto quando si stabiliscono relazioni di chiavi esterne tra le tabelle. Assicurati solo che le persone appropriate dispongano delle autorizzazioni necessarie per gli schemi che intendi utilizzare.

0

Un motivo per cui questo può causare problemi è necessario fare attenzione a eliminare le cose nell'ordine corretto. Questo può essere buono o cattivo a seconda di quanto sia importante non avere orfani nelle tabelle.

+1

Bene, ma questo è lo stesso quando si fa riferimento a una tabella nel mio schema. Destra? –

+0

Sì, è lo stesso. È qualcosa di cui bisogna fare attenzione, però –

4

Funzionerà esattamente come una chiave esterna che fa riferimento a una tabella nel proprio schema.

Come con le chiavi esterne regolari, non dimenticare di indicizzare my_id se la chiave genitore viene sempre aggiornata o se si eliminano le voci dalla tabella padre (le chiavi esterne non indicizzate possono essere una fonte di contesa massiccia e l'indice è di solito utile Comunque).

4

L'unica cosa a cui mi sono imbattuto era assicurarsi che il permesso esistesse sull'altro schema. Le solite cose - se quei permessi spariscono per qualsiasi motivo, ne sentirai parlare.

2

Se sei in un'organizzazione in cui persone diverse hanno autorità su schemi diversi, penso che sia una buona pratica dare all'altro schema la possibilità di disabilitare, o anche eliminare e ricreare, il tuo vincolo.

Ad esempio, potrebbe essere necessario eliminare o troncare la propria tabella e quindi ricaricarla per gestire un problema di supporto (molto strano). A meno che tu non voglia ricevere chiamate nel cuore della notte, ti consiglio di dare loro la possibilità di rimuovere temporaneamente il tuo vincolo. (Raccomando anche di impostare i propri avvisi in modo che tu possa sapere se uno qualsiasi dei tuoi vincoli esterni viene disabilitato o abbandonato). Quando attraversi linee organizzative/schema, vuoi giocare bene con gli altri. L'indice di cui parlava Vincent è un'altra parte di questo.

Problemi correlati