logo

Omezení referenční integrity v DBMS

Omezení referenční integrity je také známé jako omezení cizího klíče . Cizí klíč je klíč, jehož hodnoty jsou odvozeny od primárního klíče jiné tabulky.

Tabulka, ze které jsou hodnoty odvozeny, je známá jako Master nebo Reference Tabulka a tabulka, do které se odpovídajícím způsobem vkládají hodnoty, se nazývá Dítě nebo odkazování Tabulka, Jinými slovy, můžeme říci, že tabulka obsahující cizí klíč se nazývá dětský stůl a tabulka obsahující Primární klíč/klíč kandidáta se nazývá referenční nebo nadřazená tabulka . Když mluvíme o databázovém relačním modelu, kandidátský klíč lze definovat jako sadu atributů, které mohou mít nula nebo více atributů.

Syntaxe hlavní tabulky nebo odkazované tabulky je:

vytváření seznamu v Javě
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Zde sloupec Roll funguje jako Primární klíč, což pomůže při odvození hodnoty cizího klíče v podřízené tabulce.

Omezení referenční integrity

Syntaxe podřízené tabulky nebo referenční tabulky je:

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

Omezení referenční integrity

Ve výše uvedené tabulce se sloupec Roll chová jako Cizí klíč, jehož hodnoty jsou odvozeny pomocí hodnoty Roll primárního klíče z hlavní tabulky.

Omezení cizího klíče NEBO omezení referenční integrity.

Existují dvě omezení referenční integrity:

Vložit omezení: Hodnotu nelze vložit do tabulky CHILD, pokud hodnota neleží v tabulce MASTER

Smazat omezení: Hodnotu nelze smazat z MASTER tabulky, pokud leží v CHILD tabulce

Předpokládejme, že jste chtěli vložit Roll = 05 s jinými hodnotami sloupců v tabulce SUBJECT, pak okamžitě uvidíte chybu ' Porušení omezení cizího klíče ' tj. při spuštění příkazu pro vložení jako:

Vložit do SUBJECT values(5, 786, OS); nebude SQL z důvodu omezení vložení bavit (Protože nemůžete vložit hodnotu do podřízené tabulky, pokud hodnota neleží v hlavní tabulce, protože Roll = 5 není přítomen v hlavní tabulce, proto nebude povoleno zadat Roll = 5 v podřízené tabulce)

Podobně, pokud chcete odstranit Roll = 4 z tabulky STUDENT, okamžitě uvidíte chybu ' Porušení omezení cizího klíče ' tj. při spuštění příkazu k odstranění jako:

Smazat ze STUDENT kde Roll = 4; nebude SQL kvůli omezení mazání bavit. (Protože nemůžete smazat hodnotu z hlavní tabulky, pokud hodnota leží v podřízené tabulce, protože Roll = 5 je přítomen v podřízené tabulce, proto nebude možné odstranit Roll = 5 z hlavní tabulky, pokud nějak se nám podařilo odstranit Roll = 5, pak bude Roll = 5 k dispozici v podřízené tabulce, což nakonec poruší omezení vložení.

NA VYMAZÁNÍ KASKÁDY.

význam xd

Podle omezení mazání: Hodnotu nelze odstranit z MASTER tabulky, pokud hodnota leží v CHILD tabulce. Nastává další otázka, zda můžeme odstranit hodnotu z hlavní tabulky, pokud hodnota leží v podřízené tabulce, aniž bychom porušili omezení pro odstranění? tj. V okamžiku, kdy odstraníme hodnotu z hlavní tabulky, hodnota jí odpovídající by měla být odstraněna také z podřízené tabulky.

Odpověď na výše uvedenou otázku je ANO, můžeme hodnotu z hlavní tabulky smazat, pokud hodnota leží v podřízené tabulce, aniž by došlo k porušení omezení odstranění, musíme při vytváření podřízené tabulky provést mírnou úpravu, tj. na kaskádě mazání .

SYNTAXE TABULKY

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

Ve výše uvedené syntaxi, hned po klíčovém slově reference (používané pro vytváření cizího klíče), jsme přidali kaskádu mazání, přidáním takového nyní můžeme odstranit hodnotu z hlavní tabulky, pokud hodnota leží v podřízené tabulce, aniž by došlo k porušení odstranění omezení. Nyní, pokud jste chtěli odstranit Roll = 5 z hlavní tabulky, i když Roll = 5 leží v podřízené tabulce, je to možné, protože v okamžiku, kdy zadáte příkaz k odstranění Roll = 5 z hlavní tabulky, řádek s Roll = 5 z podřízené tabulky bude také odstraněn.

sts ke stažení
Omezení referenční integrity
Omezení referenční integrity

Jsou zobrazeny dvě výše uvedené tabulky STUDENT a SUBJECT se čtyřmi hodnotami, nyní předpokládejme, že chcete odstranit Roll = 4 z tabulky STUDENT( Master ) napsáním příkazu SQL: odstranit ze STUDENT kde Roll = 4;

V okamžiku, kdy SQL provede výše uvedený příkaz, řádek s Roll = 4 z tabulky SUBJECT( Child ) bude také odstraněn. STUDENT a PŘEDMĚT tabulka bude vypadat takto:

Omezení referenční integrity
Omezení referenční integrity

Z výše uvedených dvou tabulek STUDENT a SUBJECT můžete vidět, že v obou bude tabulka Roll = 4 smazána najednou, aniž by došlo k porušení omezení mazání.

Někdy je v rozhovorech položena velmi důležitá otázka: Může mít cizí klíč hodnoty NULL?

vznášející se v css

Odpověď na výše uvedenou otázku je ANO, může mít hodnoty NULL, zatímco primární klíč nemůže být za žádnou cenu NULL. Abychom výše uvedené otázce porozuměli prakticky, pochopme níže pojem delete null.

ON DELETE NULL.

Podle omezení mazání: Hodnotu nelze odstranit z MASTER tabulky, pokud hodnota leží v CHILD tabulce. Nastává další otázka, zda můžeme odstranit hodnotu z hlavní tabulky, pokud hodnota leží v podřízené tabulce, aniž bychom porušili omezení pro odstranění? tj. ve chvíli, kdy smažeme hodnotu z hlavní tabulky, hodnota jí odpovídající by měla být odstraněna také z podřízené tabulky nebo může být nahrazena hodnotou NULL.

Odpověď na výše uvedenou otázku je ANO, pokud hodnota leží v podřízené tabulce, můžeme smazat hodnotu z hlavní tabulky, aniž bychom porušili omezení mazání vložením NULL do cizího klíče, při vytváření podřízené tabulky musíme provést mírnou úpravu, tzn. přidáváním při smazání null .

SYNTAXE TABULKY:

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

Ve výše uvedené syntaxi, hned po klíčovém slově reference (používané pro vytvoření cizího klíče), jsme přidali na delete null, přidáním takového nyní můžeme odstranit hodnotu z hlavní tabulky, pokud hodnota leží v podřízené tabulce, aniž by došlo k porušení odstranění omezení. Nyní, pokud jste chtěli odstranit Roll = 4 z hlavní tabulky, i když Roll =4 leží v podřízené tabulce, je to možné, protože v okamžiku, kdy zadáte příkaz k odstranění Roll = 4 z hlavní tabulky, řádek s Roll = 4 z podřízené tabulky bude nahrazeno hodnotou NULL.

Omezení referenční integrity
Omezení referenční integrity

Jsou zobrazeny dvě výše uvedené tabulky STUDENT a SUBJECT se čtyřmi hodnotami, nyní předpokládejme, že chcete odstranit Roll = 4 z tabulky STUDENT( Master ) napsáním příkazu SQL: odstranit ze STUDENT kde Roll = 4;

V okamžiku, kdy SQL provede výše uvedený příkaz, bude řádek s Roll = 4 z tabulky SUBJECT( Child ) nahrazen hodnotou NULL, Výsledná STUDENT a PŘEDMĚT tabulka bude vypadat takto:

Omezení referenční integrity
Omezení referenční integrity

Z výše uvedených dvou tabulek STUDENT a SUBJECT můžete vidět, že v tabulce STUDENT Roll = 4 se smaže, zatímco hodnota Roll = 4 v tabulce SUBJECT je nahrazena NULL. To dokazuje, že cizí klíč může mít hodnoty null. Pokud je v případě v tabulce SUBJECT sloupec Roll primární klíč spolu s cizím klíčem, v tomto případě bychom nemohli vytvořit cizí klíč tak, aby měl hodnoty NULL.