Le regole di integrità referenziale verificano la consistenza delle tupla con riferimenti alle altre tabelle del database.
I problemi tra le varie tabelle possono nascere dalluso delle chiavi esterne. Vediamo con un esempio i problemi che possono nascere e come evitarli.
IMPIEGATO(COD_IMP,NOME,ETA)
PROGETTO(COD_PRO,TITOLO,MANAGER)
LAVORA_PER(COD_IMP,COD_PRO,RUOLO)
In questo piccolo schema vediamo una tabella impiegati, una tabella di progetti ed una ulteriore tabella LAVORA_PER che realizza una relazione N:M tra le due precedenti.
Nella tabella LAVORA_PER ci sono due chiavi esterne che definiscono limpiegato e il progetto a cui è associato.
Quando modifichiamo i dati in queste tabelle dobbiamo rispettare alcune regole per preservare lintegrità referenziale.
Prima di inserire una tupla nella tabella
LAVORA_PER dobbiamo verificare che esista nella tabella IMPIEGATO
una tupla con IMPIEGATO.COD_IMP uguale a LAVORA_PER.COD_IMP e che
esista nella tabella PROGETTO una tupla con PROGETTO.COD_PRO
uguale a LAVORA_PER.COD_PRO.
Prima di cancellare una tupla dalla
tabella IMPIEGATO dobbiamo cancellare tutte le tuple che vi fanno
riferimento nella tabella LAVORA_PER, cioè quelle dove
LAVORA_PER.COD_IMP è uguale a IMPIEGATO.COD_IMP. La stessa
considerazione vale per la cancellazione di una tupla dalla
tabella PROGETTO.
Se viene modificata la chiave primaria
della tabella IMPIEGATO bisogna variare tutti i campi di
LAVORA_PER che vi facevano riferimento. Stessa considerazione per
la chiave primaria di PROGETTO.
Queste regole impediscono di lasciare "dei puntatori nel vuoto".
La prima dice che ogni nuovo inserimento deve riferirsi a tuple esistenti, la seconda che una cancellazione deve far nascere una "cascata" di cancellazioni, la terza che una modifica deve far nascere una "cascata" di modifiche.
Per grosse basi di dati il rispetto di queste regole può essere così costoso, soprattutto in ambienti di multiutenza, che può essere conveniente vietare certe operazioni.
Verificare lintegrità allinserimento di una nuova tupla è abbastanza semplice, mentre conviene vietare la cancellazione di una tupla a cui puntano dei riferimenti e vietare la modifica delle chiavi primarie.