In questo articolo impareremo a conoscere i vincoli FOREIGN KEY e come definire un vincolo FOREIGN KEY per costruire la relazione tra due tabelle.
In un sistema di gestione di database relazionali (RDBMS), una CHIAVE ESTERA è un campo o un insieme di campi che viene utilizzato per costruire una relazione tra due tabelle o unire le due tabelle.
- FOREIGN KEY è anche noto come chiave di riferimento nell'RDBMS
- Utilizzando i vincoli FOREIGN KEY tra due tabelle, definiamo una relazione padre-figlio tra due tabelle.
- Il campo definisce i vincoli PRIMARY KEY in una tabella nota come tabella padre, mentre lo stesso campo definisce i vincoli FOREIGN KEY in un'altra tabella nota come tabella figlio.
- Può esserci solo una CHIAVE PRIMARIA nella tabella, ma non esiste un limite definito per la CHIAVE ESTERA. Possiamo avere una o più CHIAVI ESTERE sul tavolo.
- Possiamo definire vincoli FOREIGN KEY durante la creazione della tabella o definire vincoli FOREIGN KEY sulla tabella già esistente.
Facciamo un esempio per capire e conoscere i vincoli FOREIGN KEY.
Esempio:
Qui abbiamo due tabelle una è la tabella del Corso e la seconda è la tabella degli Studenti:
Gli studenti selezionano i corsi. Il seguente esempio di vincoli FOREIGN KEY è definito su un campo.
Tavolo numero uno:Tavolo degli studenti
ID_studente | Nome | Cognome | Email_Id | Città |
101 | Kareena | Detto | [email protected] | Hyderabad |
102 | Anmol | Temani | [email protected] | Galgaon |
103 | Harshal | Patel | [email protected] | Mumbai |
104 | Sakshi | Cappa | [email protected] | Pune |
105 | Certo | Kohli | [email protected] | Hyderabad |
Tabella numero due:tabella dei corsi
Course_Id | Nome_corso | ID_studente |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Null |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
Nella tabella Student, il campo Student_Id è la CHIAVE PRIMARIA e nella tabella Corso, Student_Id è la CHIAVE STRANIERA.
La FOREIGN KEY
vincolo impedisce l'inserimento di dati non validi nella colonna della chiave esterna perché deve essere uno dei valori contenuti nella tabella padre.
Definisci vincoli CHIAVE ESTERA su CREATE TABLE
L'esempio seguente definisce una CHIAVE STRANIERA nella tabella del corso.
Innanzitutto, abbiamo creato la tabella Studente con i seguenti campi:
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));
L'esempio seguente mostra come definire i vincoli FOREIGN KEY sull'altra tabella.
Corso sul nome del tavolo:
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));
Nella tabella Corso, non abbiamo definito alcuna CHIAVE PRIMARIA. Basta definire i vincoli FOREIGN KEY su Student_Id.
Il seguente esempio di vincoli FOREIGN KEY è definito su più campi.
Supponiamo di avere tre tabelle, una è la tabella Package, la seconda è la tabella Data e la terza è la tabella Talk_time:
Tabella 1:Pacchetto:
ID_pacchetto | ID_dati | Id_tempo di conversazione |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Tabella 2:Dati:
ID_dati | Limite_dati | Prezzo_dati |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Tabella 3:Talk_Time:
Talk_Time_Id | Limite_tempo di conversazione | Talk_Time _Prezzo |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
Nella tabella Talk_Time, Talk_Time_Id è la CHIAVE PRIMARIA.
Nella tabella Data, Data_Id è la CHIAVE PRIMARIA.
Mentre nella tabella Package, Talk_Time_Id e Data_Id sono le chiavi FOREIGN
Tabella numero uno:dati:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Tabella numero due: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));
Tabella numero tre:Pacchetto:
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));
FOREIGN KEY Vincoli utilizzando ALTER TABLE:
Supponiamo di aver già creato la tabella e di voler definire i vincoli FOREIGN KEY sul campo. Utilizzeremo la query ALTER TABLE per aggiungere vincoli FOREIGN KEY in questo caso.
La seguente query viene utilizzata per aggiungere i vincoli FOREIGN KEY nel campo Student_Id.
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADD Keyword viene utilizzato dopo il nome della tabella per aggiungere i vincoli FOREIGN KEY alla tabella già esistente.
Elimina il vincolo FOREIGN KEY dalla tabella
Utilizzare la query seguente per rimuovere il vincolo FOREIGN KEY dalla tabella.
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
La parola chiave Drop viene utilizzata per rimuovere i vincoli FOREIGN KEY dal campo Student_Id.
course_ibfk_1 è il nome del vincolo di chiave esterna.
Possiamo avere valori nulli nel campo dei vincoli FOREIGN KEY. Possiamo avere valori duplicati nel campo dei vincoli FOREIGN KEY.