logo

Omejitve referenčne integritete v DBMS

Omejitev referenčne celovitosti je znana tudi kot omejitev tujega ključa . Tuji ključ je ključ, katerega vrednosti izhajajo iz primarnega ključa druge tabele.

Tabela, iz katere so izpeljane vrednosti, je znana kot Master ali Reference Tabela in tabela, v katero so ustrezno vstavljene vrednosti, je znana kot Otrok ali sklicevanje Tabela, Z drugimi besedami, lahko rečemo, da tabela, ki vsebuje tuji ključ se imenuje otroška miza in tabelo, ki vsebuje Primarni ključ/ključ kandidata se imenuje referenčna ali nadrejena tabela . Ko govorimo o relacijskem modelu baze podatkov, lahko kandidatni ključ definiramo kot nabor atributov, ki ima lahko nič ali več atributov.

Sintaksa glavne tabele ali referenčne tabele je:

ključ ins
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Tu nastopa stolpec Roll Primarni ključ, ki bo pomagal pri pridobivanju vrednosti tujega ključa v podrejeni tabeli.

Omejitev referenčne integritete

Sintaksa podrejene tabele ali referenčne tabele je:

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

Omejitev referenčne integritete

V zgornji tabeli stolpec Roll deluje kot Tuji ključ, katerih vrednosti so izpeljane z uporabo vrednosti zvitka primarnega ključa iz glavne tabele.

Omejitev tujega ključa ALI omejitev referenčne integritete.

Obstajata dve omejitvi referenčne celovitosti:

Vstavi omejitev: Vrednosti ni mogoče vstaviti v tabelo CHILD, če vrednost ne leži v tabeli MASTER

Izbriši omejitev: Vrednosti ni mogoče izbrisati iz tabele MASTER, če je vrednost v tabeli CHILD

Recimo, da ste želeli vstaviti Roll = 05 z drugimi vrednostmi stolpcev v tabeli SUBJECT, potem boste takoj videli napako ' Omejitev tujega ključa je kršena ' tj. ob izvajanju ukaza za vstavljanje kot:

Vstavi v vrednosti SUBJECT (5, 786, OS); ne bo uporabljal SQL zaradi omejitve vstavljanja (Ker ne morete vstaviti vrednosti v podrejeno tabelo, če vrednost ne leži v glavni tabeli, ker Roll = 5 ni prisoten v glavni tabeli, zato ne bo dovoljen vnos Roll = 5 v podrejeno tabelo)

Podobno, če želite izbrisati Roll = 4 iz tabele STUDENT, boste takoj videli napako ' Omejitev tujega ključa je kršena ' tj. ob izvajanju ukaza za brisanje kot:

kaj pomeni google

Izbriši iz STUDENT kjer je Roll = 4; ne bo uporabljal SQL zaradi omejitve brisanja. ( Ker ne morete izbrisati vrednosti iz glavne tabele, če je vrednost v podrejeni tabeli, ker je Roll = 5 prisoten v podrejeni tabeli, zato ne bo dovoljeno izbrisati Roll = 5 iz glavne tabele, če nekako nam je uspelo izbrisati Roll = 5, potem bo Roll = 5 na voljo v podrejeni tabeli, kar bo na koncu kršilo omejitev vstavljanja.

ON DELETE CASCADE.

V skladu z omejitvijo brisanja: vrednosti ni mogoče izbrisati iz tabele MASTER, če je vrednost v tabeli CHILD. Naslednje vprašanje je, ali lahko izbrišemo vrednost iz glavne tabele, če vrednost leži v podrejeni tabeli, ne da bi pri tem kršili omejitev brisanja? tj. v trenutku, ko izbrišemo vrednost iz glavne tabele, mora biti vrednost, ki ji ustreza, izbrisana tudi iz podrejene tabele.

Odgovor na zgornje vprašanje je DA, vrednost lahko izbrišemo iz glavne tabele, če vrednost leži v podrejeni tabeli, ne da bi pri tem kršili omejitev brisanja, med ustvarjanjem podrejene tabele moramo narediti manjše spremembe, tj. z dodajanjem pri kaskadi brisanja .

tipkopis set

SINTAKSA TABELE

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

V zgornji sintaksi smo tik za ključno besedo sklicevanja (ki se uporablja za ustvarjanje tujega ključa) dodali kaskado za brisanje, če jo dodamo zdaj, lahko izbrišemo vrednost iz glavne tabele, če vrednost leži v podrejeni tabeli, ne da bi pri tem kršili brisanje omejitev. Zdaj, če želite izbrisati Roll = 5 iz glavne tabele, čeprav Roll = 5 leži v podrejeni tabeli, je to mogoče, ker v trenutku, ko date ukaz za brisanje Roll = 5 iz glavne tabele, vrstica z Roll = 5 iz podrejene tabele bo prav tako izbrisan.

Omejitev referenčne integritete
Omejitev referenčne integritete

Prikazani sta zgornji dve tabeli STUDENT in SUBJECT, ki imata vsaka štiri vrednosti, zdaj pa predpostavimo, da želite izbrisati Roll = 4 iz tabele STUDENT( Master ), tako da napišete ukaz SQL: izbriši iz STUDENT kjer je Roll = 4;

V trenutku, ko SQL izvede zgornji ukaz, bo izbrisana tudi vrstica z Roll = 4 iz tabele SUBJECT( Child ), rezultanta ŠTUDENT in PREDMET tabela bo izgledala takole:

Omejitev referenčne integritete
Omejitev referenčne integritete

Iz zgornjih dveh tabel ŠTUDENT in PREDMET lahko vidite, da se v obeh tabelah Roll = 4 izbriše naenkrat, ne da bi bila kršena omejitev brisanja.

Včasih se v intervjujih postavi zelo pomembno vprašanje: ali ima tuji ključ vrednosti NULL?

Odgovor na zgornje vprašanje je DA, lahko ima vrednosti NULL, medtem ko primarni ključ za nobeno ceno ne more biti NULL. Da bi praktično razumeli zgornje vprašanje, poglejmo spodnji koncept brisanja nič.

ON DELETE NULL.

V skladu z omejitvijo brisanja: vrednosti ni mogoče izbrisati iz tabele MASTER, če je vrednost v tabeli CHILD. Naslednje vprašanje je, ali lahko izbrišemo vrednost iz glavne tabele, če vrednost leži v podrejeni tabeli, ne da bi pri tem kršili omejitev brisanja? tj. v trenutku, ko izbrišemo vrednost iz glavne tabele, mora biti vrednost, ki ji ustreza, izbrisana tudi iz podrejene tabele ali pa jo je mogoče nadomestiti z vrednostjo NULL.

Odgovor na zgornje vprašanje je DA, vrednost lahko izbrišemo iz glavne tabele, če vrednost leži v podrejeni tabeli, ne da bi pri tem kršili omejitev brisanja, tako da v tuji ključ vstavimo NULL, med ustvarjanjem podrejene tabele moramo narediti manjše spremembe, tj. z dodajanjem pri brisanju null .

SINTAKSA TABELE:

binarno drevo po vrstnem redu
 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

V zgornji sintaksi smo tik za ključno besedo reference (ki se uporablja za ustvarjanje tujega ključa) dodali ničelno vrednost za brisanje, če jo dodamo zdaj, lahko izbrišemo vrednost iz glavne tabele, če je vrednost v podrejeni tabeli, ne da bi pri tem kršili brisanje omejitev. Zdaj, če želite izbrisati Roll = 4 iz glavne tabele, čeprav Roll =4 leži v podrejeni tabeli, je to mogoče, ker v trenutku, ko date ukaz za brisanje Roll = 4 iz glavne tabele, vrstica z Roll = 4 iz podrejene tabele bo nadomeščen z vrednostjo NULL.

Omejitev referenčne integritete
Omejitev referenčne integritete

Prikazani sta zgornji dve tabeli STUDENT in SUBJECT, ki imata vsaka štiri vrednosti, zdaj pa predpostavimo, da želite izbrisati Roll = 4 iz tabele STUDENT( Master ), tako da napišete ukaz SQL: izbriši iz STUDENT kjer je Roll = 4;

V trenutku, ko SQL izvede zgornji ukaz, bo vrstica z Roll = 4 iz tabele SUBJECT( Child ) zamenjana z vrednostjo NULL, rezultat ŠTUDENT in PREDMET tabela bo izgledala takole:

Omejitev referenčne integritete
Omejitev referenčne integritete

Iz zgornjih dveh tabel STUDENT in SUBJECT lahko vidite, da se v tabeli STUDENT Roll = 4 izbriše, medtem ko se vrednost Roll = 4 v tabeli SUBJECT nadomesti z NULL. To dokazuje, da ima zunanji ključ lahko ničelne vrednosti. Če je v primeru v tabeli SUBJECT stolpec Roll primarni ključ skupaj s tujim ključem, potem v tem primeru ne moremo narediti, da bi imel tuji ključ vrednosti NULL.