Dans cet article, nous allons découvrir les contraintes FOREIGN KEY et comment définir une contrainte FOREIGN KEY pour construire la relation entre deux tables.
Dans un système de gestion de bases de données relationnelles (RDBMS), une FOREIGN KEY est un champ ou un groupe de champs qui est utilisé pour établir une relation entre deux tables ou joindre les deux tables.
- CLÉ ÉTRANGÈRE est également appelée clé de référencement dans le SGBDR
- En utilisant les contraintes FOREIGN KEY entre deux tables, nous définissons une relation parent-enfant entre deux tables.
- Le champ définit les contraintes PRIMARY KEY dans une table appelée table parent, tandis que le même champ définit les contraintes FOREIGN KEY dans une autre table appelée table enfant.
- Il ne peut y avoir qu'une seule CLÉ PRIMAIRE dans la table, mais il n'y a pas de limite définie pour la CLÉ ÉTRANGÈRE. Nous pouvons avoir une ou plusieurs FOREIGN KEY sur la table.
- Nous pouvons définir des contraintes FOREIGN KEY lors de la création de la table ou définir des contraintes FOREIGN KEY sur la table déjà existante.
Prenons un exemple pour comprendre et connaître les contraintes FOREIGN KEY.
Exemple :
Ici, nous avons deux tables, l'une est la table Course et la seconde est la table Student :
Les étudiants sélectionnent les cours. L'exemple de contraintes FOREIGN KEY suivant est défini sur un champ.
Table numéro un :Table des élèves
Student_Id | Prénom | Nom_de_famille | Email_Id | Ville |
101 | Kareena | Sayyed | [email protected] | Hyderabad |
102 | Anmol | Temani | [email protected] | Jalgaon |
103 | Harshal | Patel | [email protected] | Bombay |
104 | Sakshi | Capuche | [email protected] | Pune |
105 | Suresh | Kohli | [email protected] | Hyderabad |
Table numéro deux :Table des cours
Course_Id | Course_Name | Student_Id |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Nul |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
Dans la table Student, le champ Student_Id est la PRIMARY KEY et dans la table Course, Student_Id est la FOREIGN KEY.
La FOREIGN KEY
La contrainte empêche l'insertion de données non valides dans la colonne de clé étrangère car il doit s'agir de l'une des valeurs contenues dans la table parent.
Définir les contraintes FOREIGN KEY sur CREATE TABLE
L'exemple suivant définit une FOREIGN KEY sur la table Course.
Tout d'abord, nous avons créé la table Student avec les champs suivants :
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'exemple suivant montre comment définir les contraintes FOREIGN KEY sur l'autre table.
Cours de nom de table :
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));Dans la table Course, nous n'avons pas défini de PRIMARY KEY. Définissez simplement les contraintes FOREIGN KEY sur le Student_Id.
L'exemple de contraintes FOREIGN KEY suivant est défini sur plusieurs champs.
Supposons que nous ayons trois tables, l'une est la table Package, la seconde est la table Data et la troisième est la table Talk_time :
Tableau 1 :Paquet :
Package_Id | Data_Id | Talktime_Id |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Tableau 2 :Données :
Data_Id | Data_Limit | Data_Price |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Tableau 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 |
Dans la table Talk_Time, Talk_Time_Id est la CLÉ PRIMAIRE.
Dans la table de données, Data_Id est la CLÉ PRIMAIRE.
Alors que dans la table Package, Talk_Time_Id et Data_Id sont les clés FOREIGN
Tableau numéro un :Données :
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Table numéro deux :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));
Tableau numéro trois :Package :
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));
Contraintes FOREIGN KEY utilisant ALTER TABLE :
Supposons que nous ayons déjà créé la table et que nous souhaitions définir les contraintes FOREIGN KEY sur le champ. Nous utiliserons la requête ALTER TABLE pour ajouter des contraintes FOREIGN KEY dans un tel cas.
La requête suivante est utilisée pour ajouter des contraintes FOREIGN KEY sur le champ Student_Id.
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADD Keyword est utilisé après le nom de la table pour ajouter les contraintes FOREIGN KEY à la table déjà existante.
Contrainte DROP FOREIGN KEY de la table
Utilisez la requête suivante pour supprimer la contrainte FOREIGN KEY de la table.
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
Le mot-clé Drop est utilisé pour supprimer les contraintes FOREIGN KEY du champ Student_Id.
course_ibfk_1 est le nom de la contrainte de clé étrangère.
Nous pouvons avoir des valeurs nulles dans le champ des contraintes FOREIGN KEY. Nous pouvons avoir des valeurs en double dans le champ FOREIGN KEY contraintes.