logo

Referenceintegritetsbegrænsninger i DBMS

En referentiel integritetsbegrænsning er også kendt som udenlandsk nøgle begrænsning . En fremmednøgle er en nøgle, hvis værdier er afledt af den primære nøgle i en anden tabel.

Tabellen, hvorfra værdierne er afledt, er kendt som Master eller Reference Tabel og den tabel, hvori værdier er indsat i overensstemmelse hermed, er kendt som Barn eller Reference Tabel, Med andre ord kan vi sige, at tabellen, der indeholder fremmed nøgle kaldes børnebord , og tabellen, der indeholder Primærnøgle/kandidatnøgle kaldes refereret eller overordnet tabel . Når vi taler om databaserelationsmodellen, kan kandidatnøglen defineres som et sæt attributter, der kan have nul eller flere attributter.

Syntaksen for mastertabellen eller referencetabellen er:

filtrerende python
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Her optræder kolonne Roll som Primærnøgle, som vil hjælpe med at udlede værdien af ​​fremmednøgle i den underordnede tabel.

Referenceintegritetsbegrænsning

Syntaksen for underordnet tabel eller referencetabel er:

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

Referenceintegritetsbegrænsning

I ovenstående tabel fungerer kolonne Rulle som Fremmed nøgle, hvis værdier er afledt ved hjælp af rulleværdien for den primære nøgle fra mastertabellen.

Foreign Key Constraint ELLER Referenceintegritetsbegrænsning.

Der er to referentielle integritetsbegrænsninger:

Indsæt begrænsning: Værdien kan ikke indsættes i CHILD Table, hvis værdien ikke ligger i MASTER Table

Slet begrænsning: Værdien kan ikke slettes fra MASTER Table, hvis værdien ligger i CHILD Table

Antag, at du ville indsætte Roll = 05 med andre værdier af kolonner i SUBJECT Table, så vil du straks se en fejl ' Fremmednøglebegrænsning overtrådt ' dvs. ved at køre en indsættelseskommando som:

ramme tkinter

Indsæt i SUBJECT-værdier(5, 786, OS); vil ikke blive underholdt af SQL på grund af Insertion Constraint (Da du ikke kan indsætte værdi i en undertabel, hvis værdien ikke ligger i hovedtabellen, da Roll = 5 ikke er til stede i mastertabellen, vil det derfor ikke være tilladt at indtaste Roll = 5 i undertabel )

På samme måde, hvis du vil slette Roll = 4 fra STUDENT Table, vil du straks se en fejl ' Fremmednøglebegrænsning overtrådt ' dvs. ved at køre en slettekommando som:

Slet fra STUDENT hvor Rulle = 4; vil ikke blive underholdt af SQL på grund af sletningsbegrænsning. ( Da du ikke kan slette værdien fra master-tabellen, hvis værdien ligger i under-tabellen, da Roll = 5 er til stede i under-tabellen, vil det derfor ikke være tilladt at slette Roll = 5 fra master-tabellen, så hvis på en eller anden måde lykkedes det at slette Roll = 5, så vil Roll = 5 være tilgængelig i den underordnede tabel, som i sidste ende vil overtræde indsættelsesbegrænsningen.

PÅ SLET CASCADE.

I henhold til sletningsbegrænsning: Værdien kan ikke slettes fra MASTER-tabellen, hvis værdien ligger i CHILD-tabellen. Det næste spørgsmål kommer, kan vi slette værdien fra mastertabellen, hvis værdien ligger i den underordnede tabel uden at overtræde sletningsbegrænsningen? dvs. i det øjeblik vi sletter værdien fra mastertabellen, bør værdien, der svarer til den, også blive slettet fra den underordnede tabel.

avl træ

Svaret på ovenstående spørgsmål er JA, vi kan slette værdien fra mastertabellen, hvis værdien ligger i den underordnede tabel uden at overtræde sletningsbegrænsningen, vi skal lave en lille modifikation under oprettelsen af ​​den underordnede tabel, dvs. ved at tilføje ved sletning af kaskade .

TABELSYNTAKS

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

I ovenstående syntaks, lige efter referencer nøgleord( brugt til at oprette fremmednøgle), har vi tilføjet delete cascade, ved at tilføje en sådan nu, kan vi slette værdien fra mastertabellen, hvis værdien ligger i den underordnede tabel uden at overtræde sletningen begrænsning. Hvis du nu ville slette Roll = 5 fra master-tabellen, selvom Roll = 5 ligger i under-tabellen, er det muligt, fordi i det øjeblik du giver kommandoen til at slette Roll = 5 fra master-tabellen, rækken med Roll = 5 fra underordnet tabel vil også blive slettet.

Referenceintegritetsbegrænsning
Referenceintegritetsbegrænsning

Ovenstående to tabeller STUDENT og SUBJECT med fire værdier hver er vist, antag nu, at du ønsker at slette Roll = 4 fra STUDENT( Master ) Table ved at skrive en SQL-kommando: slet fra STUDENT hvor Rulle = 4;

I det øjeblik SQL udfører ovenstående kommando vil rækken med Roll = 4 fra SUBJECT( Child ) Table også blive slettet, den resulterende STUDENT og FAG tabel vil se sådan ud:

Referenceintegritetsbegrænsning
Referenceintegritetsbegrænsning

Fra ovenstående to tabeller STUDENT og SUBJECT kan du se, at i begge tabellen bliver Roll = 4 slettet på én gang uden at overtræde sletningsbegrænsningen.

Nogle gange bliver der stillet et meget vigtigt spørgsmål i interviews: Kan fremmednøgle have NULL-værdier?

Svaret på ovenstående spørgsmål er JA, det kan have NULL-værdier, hvorimod den primære nøgle ikke kan være NULL for enhver pris. For at forstå ovenstående spørgsmål praktisk talt, lad os forstå nedenfor begrebet slet null.

PÅ SLET NULL.

I henhold til sletningsbegrænsning: Værdien kan ikke slettes fra MASTER-tabellen, hvis værdien ligger i CHILD-tabellen. Det næste spørgsmål kommer, kan vi slette værdien fra mastertabellen, hvis værdien ligger i den underordnede tabel uden at overtræde sletningsbegrænsningen? dvs. i det øjeblik vi sletter værdien fra mastertabellen, bør værdien, der svarer til den, også blive slettet fra child-tabellen eller kan erstattes med NULL-værdien.

Svaret på ovenstående spørgsmål er JA, vi kan slette værdien fra mastertabellen, hvis værdien ligger i child table uden at overtræde deletion constraint ved at indsætte NULL i fremmednøglen, vi er nødt til at lave en lille modifikation under oprettelse af child table, dvs. ved at tilføje ved sletning null .

hvad er min skærmstørrelse

TABELSYNTAX:

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

I ovenstående syntaks, lige efter referencer nøgleord( brugt til at oprette fremmednøgle), har vi tilføjet delete null, ved at tilføje sådan nu, kan vi slette værdien fra mastertabellen, hvis værdien ligger i den underordnede tabel uden at overtræde sletningen begrænsning. Hvis du nu ville slette Roll = 4 fra master-tabellen, selvom Roll =4 ligger i under-tabellen, er det muligt, fordi i det øjeblik du giver kommandoen til at slette Roll = 4 fra master-tabellen, er rækken med Roll = 4 fra den underordnede tabel vil blive erstattet af en NULL-værdi.

Referenceintegritetsbegrænsning
Referenceintegritetsbegrænsning

Ovenstående to tabeller STUDENT og SUBJECT med fire værdier hver er vist, antag nu, at du ønsker at slette Roll = 4 fra STUDENT( Master ) Table ved at skrive en SQL-kommando: slet fra STUDENT hvor Rulle = 4;

I det øjeblik SQL udfører ovenstående kommando, vil rækken med Roll = 4 fra SUBJECT( Child ) Table blive erstattet af en NULL-værdi, den resulterende STUDENT og FAG tabel vil se sådan ud:

Referenceintegritetsbegrænsning
Referenceintegritetsbegrænsning

Fra ovenstående to tabeller STUDENT og SUBJECT, kan du se, at i tabel STUDENT Roll = 4 bliver slettet, mens værdien af ​​Roll = 4 i SUBJECT tabellen erstattes af NULL. Dette beviser, at fremmednøglen kan have nulværdier. Hvis i tilfældet i SUBJECT Table, kolonne Roll er Primary Key sammen med Foreign Key, så kunne vi i så fald ikke lave en fremmed nøgle til at have NULL værdier.