logo

Nuorodos vientisumo apribojimai DBVS

Referencinio vientisumo apribojimas taip pat žinomas kaip užsienio rakto apribojimas . Išorinis raktas yra raktas, kurio reikšmės gaunamos iš kitos lentelės pirminio rakto.

Lentelė, iš kurios gaunamos reikšmės, yra žinoma kaip Meistras arba nuoroda Lentelė ir lentelė, kurioje atitinkamai įterpiamos reikšmės, vadinamos Vaikas arba nuoroda Lentelė Kitaip tariant, galime pasakyti, kad lentelė, kurioje yra svetimas raktas vadinamas vaikiškas stalas ir lentelę, kurioje yra Pagrindinis raktas / kandidato raktas vadinamas nuoroda arba pagrindinė lentelė . Kai kalbame apie duomenų bazės reliacinį modelį, kandidato raktas gali būti apibrėžtas kaip atributų rinkinys, kuris gali turėti nulį ar daugiau atributų.

Pagrindinės lentelės arba nuorodos lentelės sintaksė yra tokia:

dekoduoti base64 javascript
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Čia stulpelis Roll veikia kaip pirminis raktas, kuris padės nustatyti išorinio rakto reikšmę antrinėje lentelėje.

Nuorodos vientisumo apribojimas

Antrinės lentelės arba nuorodų lentelės sintaksė yra tokia:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Nuorodos vientisumo apribojimas

Aukščiau pateiktoje lentelėje stulpelis Roll veikia kaip Svetimas raktas, kurių reikšmės išvestos naudojant pirminio rakto roll reikšmę iš pagrindinės lentelės.

Užsienio rakto apribojimas ARBA nuorodos vientisumo apribojimas.

Yra du nuorodos vientisumo apribojimai:

Įterpti apribojimą: Reikšmės negalima įterpti į CHILD lentelę, jei reikšmė nėra PAGRINDINĖJE lentelėje

Ištrinti apribojimą: Reikšmės negalima ištrinti iš PAGRINDINĖS lentelės, jei reikšmė yra CHILD lentelėje

eilutę palyginkite java

Tarkime, kad norite įterpti Roll = 05 su kitomis lentelės SUBJECT stulpelių reikšmėmis, tada iškart pamatysite klaidą ' Užsienio rakto apribojimas pažeistas ty paleidus įterpimo komandą kaip:

Įterpti į SUBJECT reikšmes (5, 786, OS); SQL nelinksma dėl įterpimo apribojimo (Kadangi negalite įterpti reikšmės antrinėje lentelėje, jei reikšmės nėra pagrindinėje lentelėje, nes Roll = 5 nėra pagrindinėje lentelėje, todėl antrinėje lentelėje nebus leidžiama įvesti Roll = 5)

Panašiai, jei norite ištrinti Roll = 4 iš STUDENT Table, iškart pamatysite klaidą ' Užsienio rakto apribojimas pažeistas ty paleidus ištrynimo komandą kaip:

Ištrinti iš STUDENTAS, kur Roll = 4; SQL nelinksma dėl ištrynimo apribojimo. (Kadangi negalite ištrinti reikšmės iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje, nes Roll = 5 yra antrinėje lentelėje, todėl nebus leidžiama ištrinti Roll = 5 iš pagrindinės lentelės, kažkaip mums pavyko ištrinti Roll = 5, tada Roll = 5 bus pasiekiamas antrinėje lentelėje, o tai galiausiai pažeis įterpimo apribojimą.

IŠTRINTI KASKADĄ.

Pagal ištrynimo apribojimą: reikšmės negalima ištrinti iš MASTER lentelės, jei reikšmė yra CHILD lentelėje. Kyla kitas klausimas, ar galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje, nepažeidžiant ištrynimo apribojimo? y., Kai ištrinsime reikšmę iš pagrindinės lentelės, ją atitinkanti reikšmė taip pat turėtų būti ištrinta iš antrinės lentelės.

Atsakymas į aukščiau pateiktą klausimą yra TAIP, mes galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje nepažeisdami ištrynimo apribojimo, kurdami antrinę lentelę turime atlikti nedidelį pakeitimą, t.y. dėl trynimo kaskados .

LENTELĖS SINTAKSĖ

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

Aukščiau pateiktoje sintaksėje, iškart po nuorodų raktinio žodžio (naudojamo išorinio rakto kūrimui), mes įtraukėme trynimo kaskadą, įtraukę tokią dabar, galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje nepažeidžiant trynimo. apribojimas. Dabar, jei norite ištrinti Roll = 5 iš pagrindinės lentelės, nors Roll = 5 yra antrinėje lentelėje, tai įmanoma, nes tuo metu, kai duodate komandą ištrinti Roll = 5 iš pagrindinės lentelės, eilutė turi Roll = 5 iš antrinės lentelės taip pat bus ištrinti.

Nuorodos vientisumo apribojimas
Nuorodos vientisumo apribojimas

Aukščiau pateiktos dvi lentelės STUDENT ir SUBJECT, turinčios po keturias reikšmes, dabar tarkime, kad norite ištrinti Roll = 4 iš STUDENT (Master) lentelės parašydami SQL komandą: ištrinti iš STUDENTAS, kur Roll = 4;

Kai SQL įvykdys aukščiau pateiktą komandą, eilutė, kurios Roll = 4 iš SUBJECT( Child ) lentelės taip pat bus ištrinta, gauta STUDENTAS ir DALYKAS lentelė atrodys taip:

eilutėje yra java
Nuorodos vientisumo apribojimas
Nuorodos vientisumo apribojimas

Iš aukščiau pateiktų dviejų lentelių STUDENT ir SUBJECT matote, kad abiejose lentelėse Roll = 4 ištrinama vienu kartu nepažeidžiant ištrynimo apribojimo.

Kartais interviu užduodamas labai svarbus klausimas: Ar užsienio raktas gali turėti NULL reikšmes?

Atsakymas į aukščiau pateiktą klausimą yra TAIP, jis gali turėti NULL reikšmes, o pagrindinis raktas negali būti NULL bet kokia kaina. Norėdami suprasti aukščiau pateiktą klausimą praktiškai, toliau supraskime trynimo null sąvoką.

IŠTRINTI NULL.

xor java

Pagal ištrynimo apribojimą: reikšmės negalima ištrinti iš MASTER lentelės, jei reikšmė yra CHILD lentelėje. Kyla kitas klausimas, ar galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje, nepažeidžiant ištrynimo apribojimo? y., Kai ištrinsime reikšmę iš pagrindinės lentelės, ją atitinkanti reikšmė taip pat turėtų būti ištrinta iš antrinės lentelės arba gali būti pakeista reikšme NULL.

Atsakymas į aukščiau pateiktą klausimą yra TAIP, mes galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje, nepažeisdami trynimo apribojimo, įterpdami NULL į išorinį raktą, kurdami antrinę lentelę turime atlikti nedidelę modifikaciją, t.y. pridedant ištrinant null .

LENTELĖS SINTAKSĖ:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

Aukščiau pateiktoje sintaksėje, iškart po nuorodų raktinio žodžio (naudojamo išorinio rakto kūrimui), mes pridėjome trynimo null, pridėdami tokį dabar, galime ištrinti reikšmę iš pagrindinės lentelės, jei reikšmė yra antrinėje lentelėje nepažeidžiant trynimo. apribojimas. Dabar, jei norite ištrinti Roll = 4 iš pagrindinės lentelės, nors Roll = 4 yra antrinėje lentelėje, tai įmanoma, nes tuo metu, kai duodate komandą ištrinti Roll = 4 iš pagrindinės lentelės, eilutė turi Roll = 4 iš antrinės lentelės bus pakeista reikšme NULL.

Nuorodos vientisumo apribojimas
Nuorodos vientisumo apribojimas

Aukščiau pateiktos dvi lentelės STUDENT ir SUBJECT, turinčios po keturias reikšmes, dabar tarkime, kad norite ištrinti Roll = 4 iš STUDENT (Master) lentelės parašydami SQL komandą: ištrinti iš STUDENTAS, kur Roll = 4;

Kai SQL įvykdys aukščiau pateiktą komandą, eilutė su Roll = 4 iš SUBJECT( Child ) lentelės bus pakeista NULL reikšme, gauta STUDENTAS ir DALYKAS lentelė atrodys taip:

Nuorodos vientisumo apribojimas
Nuorodos vientisumo apribojimas

Iš aukščiau pateiktų dviejų lentelių STUDENT ir SUBJECT matote, kad lentelėje STUDENT Roll = 4 bus ištrintas, o Roll = 4 lentelėje SUBJECT yra pakeista NULL. Tai įrodo, kad užsienio raktas gali turėti nulines reikšmes. Jei lentelės SUBJECT atveju stulpelis Roll yra pagrindinis raktas kartu su svetimu raktu, tokiu atveju negalėtume nustatyti, kad išorinis raktas turėtų NULL reikšmes.