logo

Obmedzenia referenčnej integrity v DBMS

Obmedzenie referenčnej integrity je tiež známe ako obmedzenie cudzieho kľúča . Cudzí kľúč je kľúč, ktorého hodnoty sú odvodené od primárneho kľúča inej tabuľky.

Tabuľka, z ktorej sú odvodené hodnoty, je známa ako Master alebo Referenced Tabuľka a tabuľka, do ktorej sa vkladajú hodnoty zodpovedajúcim spôsobom, je známa ako Dieťa alebo Odkazovanie Tabuľka, Inými slovami, môžeme povedať, že tabuľka obsahujúca cudzí kľúč sa nazýva detský stôl a tabuľku obsahujúcu Primárny kľúč/kľúč kandidáta sa nazýva referenčná alebo nadradená tabuľka . Keď hovoríme o databázovom relačnom modeli, kandidátsky kľúč možno definovať ako množinu atribútov, ktoré môžu mať nula alebo viac atribútov.

Syntax hlavnej tabuľky alebo referenčnej tabuľky je:

iterátor java mapa
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Tu stĺpec Roll pôsobí ako Primárny kľúč, čo pomôže pri odvodení hodnoty cudzieho kľúča v podradenej tabuľke.

Obmedzenie referenčnej integrity

Syntax podradenej tabuľky alebo referenčnej tabuľky je:

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

Obmedzenie referenčnej integrity

Vo vyššie uvedenej tabuľke stĺpec Roll funguje ako Cudzí kľúč, ktorých hodnoty sú odvodené pomocou hodnoty Roll primárneho kľúča z hlavnej tabuľky.

Obmedzenie cudzieho kľúča ALEBO obmedzenie referenčnej integrity.

Existujú dve obmedzenia referenčnej integrity:

Vložiť obmedzenie: Hodnotu nemožno vložiť do tabuľky CHILD, ak hodnota neleží v tabuľke MASTER

Odstrániť obmedzenie: Hodnota nemôže byť vymazaná z MASTER tabuľky, ak leží v CHILD tabuľke

Predpokladajme, že ste chceli vložiť Roll = 05 s inými hodnotami stĺpcov v tabuľke SUBJECT, potom sa vám okamžite zobrazí chyba ' Obmedzenie cudzieho kľúča porušené ' tj pri spustení príkazu na vloženie ako:

Vložiť do SUBJECT values(5, 786, OS); nebude baviť SQL kvôli obmedzeniu vloženia (Keďže nemôžete vložiť hodnotu do podradenej tabuľky, ak hodnota neleží v hlavnej tabuľke, pretože Roll = 5 sa nenachádza v hlavnej tabuľke, preto nebude povolené zadať Roll = 5 v podradenej tabuľke )

Podobne, ak chcete vymazať Roll = 4 z tabuľky STUDENT, okamžite sa vám zobrazí chyba ' Obmedzenie cudzieho kľúča porušené ' tj pri spustení príkazu na odstránenie ako:

Odstrániť zo ŠTUDENTA kde Roll = 4; nebude baviť SQL z dôvodu obmedzenia vymazania. (Keďže nemôžete vymazať hodnotu z hlavnej tabuľky, ak hodnota leží v podradenej tabuľke, pretože Roll = 5 je prítomný v podradenej tabuľke, preto nebude povolené vymazať Roll = 5 z hlavnej tabuľky, ak nejako sa nám podarilo odstrániť Roll = 5, potom bude v podradenej tabuľke k dispozícii Roll = 5, čo v konečnom dôsledku poruší obmedzenie vloženia.

NA VYMAZANIE KASKÁDY.

pričom slučka java

Podľa obmedzenia vymazania: Hodnota nemôže byť vymazaná z MASTER tabuľky, ak leží v CHILD tabuľke. Nastáva ďalšia otázka, či môžeme vymazať hodnotu z hlavnej tabuľky, ak hodnota leží v podradenej tabuľke bez porušenia obmedzenia vymazania? t.j. V momente, keď vymažeme hodnotu z hlavnej tabuľky, hodnota, ktorá jej zodpovedá, by sa mala vymazať aj z podradenej tabuľky.

Odpoveď na vyššie uvedenú otázku je ÁNO, hodnotu z hlavnej tabuľky môžeme vymazať, ak hodnota leží v podradenej tabuľke bez porušenia obmedzenia vymazania, pri vytváraní podradenej tabuľky musíme vykonať miernu úpravu, t.j. na kaskáde vymazania .

SYNTAX TABUĽKY

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

Vo vyššie uvedenej syntaxi, hneď po kľúčovom slove odkazov (používanom na vytvorenie cudzieho kľúča), sme pridali kaskádu odstránenia, pridaním takejto teraz môžeme odstrániť hodnotu z hlavnej tabuľky, ak hodnota leží v podradenej tabuľke bez porušenia vymazania obmedzenie. Ak by ste teraz chceli vymazať Roll = 5 z hlavnej tabuľky, hoci Roll = 5 leží v podradenej tabuľke, je to možné, pretože v momente, keď zadáte príkaz na vymazanie Roll = 5 z hlavnej tabuľky, riadok s Roll = 5 z podradenej tabuľky sa tiež odstráni.

operátorov v programovaní v pythone
Obmedzenie referenčnej integrity
Obmedzenie referenčnej integrity

Zobrazia sa dve vyššie uvedené tabuľky STUDENT a SUBJECT so štyrmi hodnotami, teraz predpokladajme, že chcete odstrániť Roll = 4 z tabuľky STUDENT( Master ) napísaním príkazu SQL: vymazať zo STUDENT kde Roll = 4;

V momente, keď SQL vykoná vyššie uvedený príkaz, riadok s Roll = 4 z tabuľky SUBJECT ( Child ) bude tiež odstránený. ŠTUDENT a PREDMET tabuľka bude vyzerať takto:

Obmedzenie referenčnej integrity
Obmedzenie referenčnej integrity

Z vyššie uvedených dvoch tabuliek STUDENT a SUBJECT môžete vidieť, že v oboch tabuľkách Roll = 4 sa vymaže naraz bez porušenia obmedzenia vymazania.

Niekedy sa v rozhovoroch kladie veľmi dôležitá otázka: Môže mať cudzí kľúč hodnoty NULL?

pytón alebo

Odpoveď na vyššie uvedenú otázku je ÁNO, môže mať hodnoty NULL, zatiaľ čo primárny kľúč nemôže byť za žiadnu cenu NULL. Aby sme porozumeli vyššie uvedenej otázke prakticky, pochopme nižšie pojem delete null.

ON DELETE NULL.

Podľa obmedzenia vymazania: Hodnota nemôže byť vymazaná z MASTER tabuľky, ak leží v CHILD tabuľke. Nastáva ďalšia otázka, či môžeme vymazať hodnotu z hlavnej tabuľky, ak hodnota leží v podradenej tabuľke bez porušenia obmedzenia vymazania? t.j. V momente, keď vymažeme hodnotu z hlavnej tabuľky, hodnota jej zodpovedajúca by sa mala vymazať aj z podradenej tabuľky alebo ju možno nahradiť hodnotou NULL.

Odpoveď na vyššie uvedenú otázku je ÁNO, hodnotu z hlavnej tabuľky môžeme vymazať, ak hodnota leží v podradenej tabuľke bez porušenia obmedzenia vymazania vložením NULL do cudzieho kľúča, pri vytváraní podriadenej tabuľky musíme urobiť miernu úpravu, t.j. pridaním na vymazanie null .

SYNTAX TABUĽKY:

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

Vo vyššie uvedenej syntaxi, hneď po kľúčovom slove odkazov (používanom na vytvorenie cudzieho kľúča), sme pridali na delete null, pridaním takého teraz môžeme odstrániť hodnotu z hlavnej tabuľky, ak hodnota leží v podradenej tabuľke bez porušenia vymazania obmedzenie. Ak by ste teraz chceli vymazať Roll = 4 z hlavnej tabuľky, aj keď Roll =4 leží v podradenej tabuľke, je to možné, pretože v momente, keď zadáte príkaz na vymazanie Roll = 4 z hlavnej tabuľky, riadok s Roll = 4 z podradenej tabuľky sa nahradí hodnotou NULL.

Obmedzenie referenčnej integrity
Obmedzenie referenčnej integrity

Zobrazia sa dve vyššie uvedené tabuľky STUDENT a SUBJECT so štyrmi hodnotami, teraz predpokladajme, že chcete odstrániť Roll = 4 z tabuľky STUDENT( Master ) napísaním príkazu SQL: vymazať zo ŠTUDENTA kde Roll = 4;

V momente, keď SQL vykoná vyššie uvedený príkaz, riadok s Roll = 4 z tabuľky SUBJECT ( Child ) bude nahradený hodnotou NULL. ŠTUDENT a PREDMET tabuľka bude vyzerať takto:

Obmedzenie referenčnej integrity
Obmedzenie referenčnej integrity

Z vyššie uvedených dvoch tabuliek STUDENT a SUBJECT môžete vidieť, že v tabuľke STUDENT Roll = 4 sa vymaže, zatiaľ čo hodnota Roll = 4 v tabuľke SUBJECT je nahradená NULL. To dokazuje, že cudzí kľúč môže mať hodnoty null. Ak v prípade tabuľky SUBJECT je stĺpec Roll Primárny kľúč spolu s Cudzím kľúčom, potom v takom prípade nemôžeme vytvoriť cudzí kľúč tak, aby mal hodnoty NULL.