In dit artikel leren we over de FOREIGN KEY-beperkingen en hoe u een FOREIGN KEY-beperking definieert om de relatie tussen twee tabellen op te bouwen.
In een relationeel databasebeheersysteem (RDBMS) is een FOREIGN KEY een veld of een aantal velden dat wordt gebruikt om een relatie tussen twee tabellen op te bouwen of om de twee tabellen samen te voegen.
- BUITENLANDSE SLEUTEL is ook bekend als referentiesleutel in het RDBMS
- Door FOREIGN KEY-beperkingen tussen twee tabellen te gebruiken, definiëren we een ouder-kindrelatie tussen twee tabellen.
- Het veld definieert de PRIMARY KEY-beperkingen in een tabel die bekend staat als de bovenliggende tabel, terwijl hetzelfde veld de FOREIGN KEY-beperkingen definieert in een andere tabel die bekend staat als de onderliggende tabel.
- Er kan slechts één PRIMAIRE SLEUTEL in de tabel staan, maar er is geen gedefinieerde limiet voor de BUITENLANDSE SLEUTEL. We kunnen één of meer dan één BUITENLANDSE SLEUTEL op tafel hebben.
- We kunnen FOREIGN KEY-beperkingen definiëren tijdens het maken van de tabel of FOREIGN KEY-beperkingen definiëren voor de reeds bestaande tabel.
Laten we een voorbeeld nemen om de beperkingen van FOREIGN KEY te begrijpen en er meer over te leren.
Voorbeeld:
Hier hebben we twee tafels, de ene is de cursustabel en de tweede is de studententafel:
De studenten kiezen cursussen. Het volgende FOREIGN KEY-beperkingenvoorbeeld is gedefinieerd op één veld.
Tafel nummer één:studententafel
Student_Id | Voornaam | Achternaam | Email_Id | Stad |
101 | Kareena | Sayed | [email protected] | Hyderabad |
102 | Anmol | Temani | [email protected] | Jalgaon |
103 | Harshal | Patel | [email protected] | Mumbai |
104 | Sakshi | Kap | [email protected] | Pune |
105 | Zeker | Kohli | [email protected] | Hyderabad |
Tabel nummer twee:cursustafel
Course_Id | Cursusnaam | Student_Id |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Null |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
In de tabel Student is het veld Student_Id de PRIMARY KEY en in de tabel Cursus is Student_Id de FOREIGN KEY.
De FOREIGN KEY
constraint voorkomt dat ongeldige gegevens worden ingevoegd in de refererende-sleutelkolom omdat het een van de waarden in de bovenliggende tabel moet zijn.
Definieer BUITENLANDSE KEY-beperkingen op CREATE TABLE
Het volgende voorbeeld definieert een BUITENLANDSE SLEUTEL in de cursustabel.
Eerst hebben we de Student-tabel gemaakt met de volgende velden:
CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50), City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));
Het volgende voorbeeld laat zien hoe u de FOREIGN KEY-beperkingen in de andere tabel definieert.
Tafelnaam Cursus:
CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));
In de cursustabel hebben we geen PRIMAIRE SLEUTEL gedefinieerd. Definieer gewoon de FOREIGN KEY-beperkingen op de Student_Id.
Het volgende voorbeeld van FOREIGN KEY-beperkingen is gedefinieerd voor meerdere velden.
Stel dat we drie tabellen hebben, één is de Package-tabel, de tweede is de Data-tabel en de derde is de Talk_time-tabel:
Tabel 1:Pakket:
Package_Id | Data_Id | Talktime_Id |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Tabel 2:Gegevens:
Data_Id | Data_Limit | Data_Price |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Tabel 3:Talk_Time:
Talk_Time_Id | Talk_Time _Limit | Talk_Time _Price |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
In de tabel Talk_Time is Talk_Time_Id de PRIMAIRE SLEUTEL.
In de gegevenstabel is Data_Id de PRIMAIRE SLEUTEL.
Terwijl in de pakkettabel Talk_Time_Id en Data_Id de FOREIGN-sleutels zijn
Tabel nummer één:gegevens:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Tabel nummer twee:Talk_Time:
CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));
Tabel nummer drie:Pakket:
CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));
BUITENLANDSE KEY-beperkingen met behulp van ALTER TABLE:
Stel dat we de tabel al hebben gemaakt en de FOREIGN KEY-beperkingen op het veld willen definiëren. In een dergelijk geval zullen we de ALTER TABLE-query gebruiken om FOREIGN KEY-beperkingen toe te voegen.
De follow-query wordt gebruikt om FOREIGN KEY-beperkingen toe te voegen aan het veld Student_Id.
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADD Trefwoord wordt gebruikt na de tabelnaam om de FOREIGN KEY-beperkingen toe te voegen aan de reeds bestaande tabel.
DROP FOREIGN KEY-beperking uit de tabel
Gebruik de volgende query om de FOREIGN KEY-beperking uit de tabel te verwijderen.
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
Het drop-trefwoord wordt gebruikt om FOREIGN KEY-beperkingen uit het veld Student_Id te verwijderen.
course_ibfk_1 is de naam van de externe sleutelbeperking.
We kunnen null-waarden hebben in het veld FOREIGN KEY-beperkingen. We kunnen dubbele waarden hebben in het veld FOREIGN KEY-beperkingen.