Restrictii referentiale

 

Se rezolva prin folosirea  clauzelor REFERENCES / FOREIGN KEY.
Constrangerea FOREIGN KEY stabileste o relatie 1:N (parinte-copil) intre doua tabele prin intermediul uneia sau a mai multor coloane comune. Cheia straina dintr-un tabel se va referi la o cheie primara sau o cheie alternativa din tabelul parinte.
Constrangerea  FOREIGN KEY mentine integritatea datelor intre un tabel parinte si un tabel copil. Se permite definirea unei coloane in tabelul copil care esista ca si cheie primara/candidat  in tabelul parinte. Cand se introduce o valoare in coloana asupra careia s-a impus constrangerea, valoarea  este cautata printre valorile cheii  primare/candidat din tabelul parinte si daca aceasta nu se gaseste randul nu poate fi inserat.

[CONSTRAINT <nume_constrangere>]
REFERENCES [<schema>.]<tabel>
[(<coloana>,<coloana>,...)]
[ON DELETE {CASCADE |SET NULL}]
 

Exemplu: se va crea tabelul Facturi si se vor  stabili restrictiile de integritate referentiala  impuse de legatura 1:N dintre Agenti si Facturi.
CREATE  TABLE Facturi (
    Numar  INTEGER
        CONSTRAINT nn_facturi_numar NOT NULL,
    Data DATE
        CONSTRAINT nn_facturi_data  NOT NULL,
    Cod CHAR (4)
        CONSTRAINT fk_facturi_agenti REFERENCES  agenti(cod),
    tip_pr  NUMBER(2)
           CONSTRAINT fk_facturi_tipuri REFERENCES  tipuri (tip_pr) ,
    Pret NUMBER (7,2),
    Cant NUMBER (6,2),
     Val NUMBER (10,2),
            PRIMARY KEY (numar,data));
 
Se poate specifica si modul de actiune în cazul unei operatii care ar putea conduce la  violarea unei restrictii  referentiale (cascadat sau restrictionat).
Singura optiune care nu este permisa este  ON UPDATE CASCADE, a.î.  la modificarea unei chei primare  aceasta trebuie modificata prin  declansatoare în toate  înregistrarile copil.