logo

Ograniczenia integralności referencyjnej w systemie DBMS

Ograniczenie integralności referencyjnej jest również znane jako ograniczenie klucza obcego . Klucz obcy to klucz, którego wartości pochodzą z klucza podstawowego innej tabeli.

Tabela, z której pochodzą wartości, nazywa się Główny lub referencyjny Tabela i tabela, w której odpowiednio wstawiane są wartości, nazywana jest Dziecko lub odniesienie Tabela, Innymi słowy, możemy powiedzieć, że tabela zawierająca klucz obcy nazywa się stolik dziecięcy oraz tabelę zawierającą Klucz podstawowy/klucz kandydujący nazywa się tabela odniesienia lub tabela nadrzędna . Kiedy mówimy o relacyjnym modelu bazy danych, klucz kandydujący można zdefiniować jako zbiór atrybutów, który może mieć zero lub więcej atrybutów.

Składnia tabeli głównej lub tabeli odniesienia jest następująca:

fabryczny wzór projektowy
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Tutaj kolumna Roll pełni rolę Główny klucz, co pomoże w wyprowadzeniu wartości klucza obcego w tabeli podrzędnej.

Ograniczenie integralności referencyjnej

Składnia tabeli podrzędnej lub tabeli referencyjnej jest następująca:

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

Ograniczenie integralności referencyjnej

W powyższej tabeli kolumna Roll pełni rolę klucz obcy, których wartości są wyprowadzane przy użyciu wartości Roll klucza podstawowego z tabeli głównej.

Ograniczenie klucza obcego LUB ograniczenie integralności referencyjnej.

Istnieją dwa ograniczenia integralności referencyjnej:

Wstaw wiązanie: Nie można wstawić wartości do tabeli CHILD, jeśli wartość nie znajduje się w tabeli MASTER

rzutowanie typów i konwersja typów w Javie

Usuń ograniczenie: Nie można usunąć wartości z tabeli MASTER, jeżeli znajduje się ona w tabeli CHILD

Załóżmy, że chcesz wstawić Roll = 05 z innymi wartościami kolumn w tabeli TEMAT, wtedy natychmiast zobaczysz błąd ' Naruszono ograniczenie klucza obcego ', tj. po uruchomieniu polecenia wstawiania jako:

Wstaw wartości TEMATU (5, 786, OS); nie będzie obsługiwany przez SQL ze względu na ograniczenie wstawiania (Ponieważ nie można wstawić wartości do tabeli podrzędnej, jeśli wartość nie znajduje się w tabeli głównej, ponieważ w tabeli głównej nie ma wartości Roll = 5, dlatego wprowadzenie wartości Roll = 5 w tabeli podrzędnej nie będzie możliwe)

Podobnie, jeśli chcesz usunąć Roll = 4 z tabeli STUDENT, natychmiast zobaczysz błąd „ Naruszono ograniczenie klucza obcego ', tj. po uruchomieniu polecenia usuwania jako:

Usuń ze STUDENTA gdzie Roll = 4; nie będą obsługiwane przez SQL ze względu na ograniczenie usuwania. ( Ponieważ nie można usunąć wartości z tabeli głównej, jeśli wartość znajduje się w tabeli podrzędnej, ponieważ w tabeli podrzędnej znajduje się Roll = 5, dlatego usunięcie Roll = 5 z tabeli głównej nie będzie możliwe, jeśli w jakiś sposób udało nam się usunąć Roll = 5, wówczas Roll = 5 będzie dostępny w tabeli podrzędnej, co ostatecznie naruszy ograniczenie wstawiania).

PRZY USUŃ KASKADĘ.

Zgodnie z ograniczeniem usuwania: Nie można usunąć wartości z tabeli MASTER, jeśli znajduje się ona w tabeli CHILD. Pojawia się kolejne pytanie, czy możemy usunąć wartość z tabeli głównej, jeśli znajduje się ona w tabeli podrzędnej, bez naruszania ograniczenia usuwania? tj. w chwili, gdy usuniemy wartość z tabeli głównej, odpowiadająca jej wartość powinna również zostać usunięta z tabeli podrzędnej.

Odpowiedź na powyższe pytanie brzmi TAK, możemy usunąć wartość z tabeli głównej, jeżeli wartość znajduje się w tabeli podrzędnej, nie naruszając przy tym ograniczenia usuwania, przy tworzeniu tabeli podrzędnej musimy dokonać niewielkiej modyfikacji, tj. dodając przy usuwaniu kaskady .

SKŁADNIA TABELI

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

W powyższej składni zaraz po słowie kluczowym referencje (używanym do tworzenia klucza obcego) dodaliśmy kaskadę usuwania, dodając ją teraz, możemy usunąć wartość z tabeli głównej, jeśli wartość znajduje się w tabeli podrzędnej, bez naruszania zasady usuwania ograniczenie. Teraz, jeśli chcesz usunąć Roll = 5 z tabeli głównej, mimo że Roll = 5 znajduje się w tabeli podrzędnej, jest to możliwe, ponieważ w momencie wydania polecenia usunięcia Roll = 5 z tabeli głównej, wiersz zawierający Roll = 5 z tabeli podrzędnej również zostanie usunięte.

Ograniczenie integralności referencyjnej
Ograniczenie integralności referencyjnej

Pokazane są dwie powyższe tabele STUDENT i SUBJECT, każda posiadająca cztery wartości. Załóżmy teraz, że chcesz usunąć Roll = 4 z tabeli STUDENT(Master), pisząc polecenie SQL: usuń ze STUDENTA gdzie Roll = 4;

alfabet jako cyfry

W momencie, gdy SQL wykona powyższe polecenie, wiersz o wartości Roll = 4 z tabeli SUBJECT (podrzędnej) również zostanie usunięty, wynikowy STUDENT I PRZEDMIOT tabela będzie wyglądać następująco:

Ograniczenie integralności referencyjnej
Ograniczenie integralności referencyjnej

Z powyższych dwóch tabel STUDENT i SUBJECT widać, że w obu tabelach Roll = 4 zostaje usunięty za jednym razem, bez naruszenia ograniczenia usuwania.

Czasami w rozmowach kwalifikacyjnych pada bardzo ważne pytanie: Czy klucz obcy może mieć wartości NULL?

Odpowiedź na powyższe pytanie brzmi TAK, może mieć wartości NULL, natomiast klucz podstawowy nie może mieć wartości NULL za żadną cenę. Aby praktycznie zrozumieć powyższe pytanie, przyjrzyjmy się poniżej koncepcji usuwania wartości null.

Kolejka priorytetowa Java

NA USUŃ NULL.

Zgodnie z ograniczeniem usuwania: Nie można usunąć wartości z tabeli MASTER, jeśli znajduje się ona w tabeli CHILD. Pojawia się kolejne pytanie, czy możemy usunąć wartość z tabeli głównej, jeśli znajduje się ona w tabeli podrzędnej, bez naruszania ograniczenia usuwania? tj. w momencie, gdy usuniemy wartość z tabeli głównej, odpowiadająca jej wartość powinna również zostać usunięta z tabeli podrzędnej lub może zostać zastąpiona wartością NULL.

Odpowiedź na powyższe pytanie brzmi TAK, możemy usunąć wartość z tabeli głównej, jeśli wartość znajduje się w tabeli podrzędnej, nie naruszając ograniczenia usuwania, wstawiając NULL do klucza obcego, przy tworzeniu tabeli podrzędnej musimy dokonać niewielkiej modyfikacji, tj. poprzez dodanie przy usuwaniu wartości null .

SKŁADNIA TABELI:

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

W powyższej składni zaraz po słowie kluczowym referencje (używanym do tworzenia klucza obcego) dodaliśmy opcję usuwania null, dodając ją teraz, możemy usunąć wartość z tabeli głównej, jeśli wartość znajduje się w tabeli podrzędnej, bez naruszania zasady usuwania ograniczenie. Teraz, jeśli chcesz usunąć Roll = 4 z tabeli głównej, mimo że Roll = 4 leży w tabeli podrzędnej, jest to możliwe, ponieważ w momencie wydania polecenia usunięcia Roll = 4 z tabeli głównej wiersz zawierający Roll = Wartość 4 z tabeli podrzędnej zostanie zastąpiona wartością NULL.

Ograniczenie integralności referencyjnej
Ograniczenie integralności referencyjnej

Pokazane są dwie powyższe tabele STUDENT i SUBJECT, każda posiadająca cztery wartości. Załóżmy teraz, że chcesz usunąć Roll = 4 z tabeli STUDENT(Master), pisząc polecenie SQL: usuń ze STUDENTA gdzie Roll = 4;

W momencie, gdy SQL wykona powyższe polecenie, wiersz o wartości Roll = 4 z tabeli SUBJECT (podrzędnej) zostanie zastąpiony wartością NULL. Wynik STUDENT I PRZEDMIOT tabela będzie wyglądać następująco:

Ograniczenie integralności referencyjnej
Ograniczenie integralności referencyjnej

Z powyższych dwóch tabel STUDENT i SUBJECT widać, że w tabeli STUDENT Roll = 4 zostaje usunięta, natomiast wartość Roll = 4 w tabeli SUBJECT zostaje zastąpiona przez NULL. Dowodzi to, że klucz obcy może mieć wartości null. Jeśli w przypadku tabeli SUBJECT kolumna Roll jest kluczem podstawowym wraz z kluczem obcym, wówczas w takim przypadku nie moglibyśmy utworzyć klucza obcego o wartości NULL.