Introduction à la clé étrangère en SQL

La clé étrangère est une contrainte en SQL. Il est utilisé pour relier les deux tableaux. Une clé étrangère dans une table pointe vers une clé primaire dans une autre table. Une clé étrangère peut être utilisée pour s'assurer que la ligne d'une table a une ou des lignes correspondantes dans une autre table. La table référencée est appelée la table parent et la table avec la clé étrangère est connue comme la table enfant. Cette relation parent-enfant applique la règle connue sous le nom d'intégrité référentielle. L'intégrité référentielle est une propriété des données indiquant que toutes ses références sont valides.

Donc, si vous avez des relations 1 à plusieurs ou plusieurs à plusieurs dans la base de données, les clés étrangères seront très utiles. Il agit comme une référence croisée entre deux tables (parent_table et child_table) car il fait référence à la clé primaire d'une autre table. Il établit donc un lien entre parent_table et child_table.

Syntaxe

La création d'une nouvelle table avec une clé étrangère nécessite l'autorisation CREATE TABLE dans la base de données

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table est le nom de la table que nous allons créer
  • column_1, column_2- les colonnes à ajouter au tableau.
  • F_key - Il s'agit d'une contrainte de clé étrangère.
  • child_column1, child_column2… child_column_n- C'est le nom des colonnes child_Table pour référencer la clé primaire dans la table parent.
  • Parent_Table - C'est le nom de parent_table. La clé primaire de parent_table est référencée dans child_table
  • ON DELETE - Ce paramètre prend des mesures sur les données enfant après la suppression des données parent. SET NULL, NO ACTION, CASCADE, SET DEFAULT sont quelques-unes des valeurs de ce paramètre.
  • ON UPDATE - Il s'agit d'un paramètre facultatif qui prend des mesures sur les données enfant après la mise à jour des données parent. SET NULL, NO ACTION, CASCADE, SET DEFAULT sont quelques-unes des valeurs de ce paramètre.
  • CASCADE - Nous pouvons l'utiliser avec ON DELETE et ON UPDATE. Après la suppression ou la mise à jour des données parent Les données enfant seront soit supprimées soit mises à jour.

La création d'une clé étrangère dans une table existante nécessite l'autorisation ALTER sur la table.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Règles

  1. Les clés étrangères ne s'appliquent pas aux tables temporaires.
  2. La contrainte de clé étrangère ne doit pas être liée uniquement à la clé primaire d'une autre table, elle peut également être liée à la contrainte UNIQUE d'une autre table.
  3. Les contraintes FOREIGN KEY peuvent référencer une autre colonne de la même table. C'est ce qu'on appelle une auto-référence.
  4. Les contraintes de clé étrangère peuvent faire référence aux tables de la même base de données.
  5. Nous pouvons également insérer des valeurs NULL dans la table enfant.
  6. Lorsque nous insérons une valeur autre que la valeur NULL dans la contrainte de clé étrangère, la valeur doit exister dans la colonne référencée, sinon un message de violation s'est produit.
  7. La valeur des clés uniques du parent ne peut pas être modifiée si la règle de mise à jour est RESTRICT et qu'il existe une ou plusieurs lignes dépendantes. Cependant, si la règle de mise à jour est NO ACTION, les clés uniques parent peuvent être mises à jour tant que chaque enfant possède une clé parent au moment où l'instruction de mise à jour se termine.

Exemples

Disons que nous avons deux tables Clients et Commandes. La table Clients contient toutes les données relatives aux clients et la table Commandes contient les données relatives aux commandes des clients.

Les clients

Cust_idClé primaire
Cust_name
Emplacement

Ordres

Numéro de commandeClé primaire
Date de commande
Qté
Cust_idClé étrangère
Montant total

Dans l'exemple ci-dessus, la colonne Cust_id de la table ORDERS est une clé étrangère pointant vers la colonne Cust_id de la table CUSTOMERS.

Supposons que ces tableaux aient les valeurs suivantes

Les clients

1001AlexNOUS
1002CareyNOUS
1003SidRoyaume-Uni
1004À MAUS
1005KapilINDIANA

Ordres

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-2016sept1001890
8502-01-201621002260

Pour cust_id 1001, trois commandes existent dans la table des commandes.

Pour cust_id 1003, il n'y a pas de commande.

Donc, si nous avons des données particulières (par exemple, id 1003) dans la table parent, il n'est pas nécessaire d'avoir ces données dans la table enfant, mais vice versa, ce n'est pas vrai.

Nous ne pouvons pas avoir de données dans la table enfant (Table des commandes) qui n'existe pas dans la table parent (Clients.)

Par exemple, nous ne pouvons pas insérer un nouvel enregistrement, par exemple pour cust_id 1006 dans la table Orders, car cust_id 1006 n'existe pas dans la table Customers.

Voici donc les exemples qui violent l'intégrité référentielle de cette relation:

  1. Insertion d'une ligne dans la table ORDERS où Cust_ID n'apparaît pas dans la colonne Cust_ID de la table CUSTOMERS.
  2. Suppression d'une ligne de la table CUSTOMERS où le Cust_ID de la ligne à supprimer est toujours présent dans la colonne Cust_ID de la table ORDERS.

Lorsqu'un enregistrement particulier est supprimé de la table principale, il existe deux façons de maintenir l'intégrité des données dans la table enfant. Lorsque deux tables sont connectées avec une clé étrangère et que certaines données de la table principale sont supprimées, pour lesquelles l'enregistrement existe également dans la table enfant, nous avons un mécanisme pour enregistrer l'intégrité des données dans la table enfant

  • Lors de la suppression de la cascade : cela supprimera l'enregistrement de la table enfant si cette valeur de la clé étrangère est supprimée de la table principale.
  • Lors de la suppression de NULL: cela définira toutes les valeurs de cet enregistrement de la table enfant comme NULL, pour lesquelles la valeur de la clé étrangère est supprimée de la table principale.

Conclusion - Clé étrangère dans SQL

Il est donc conseillé d'utiliser la clé étrangère dans la base de données qui a une à une ou une à plusieurs relations. Le principal avantage de l'utilisation de contraintes de clé étrangère est qu'elle améliore les performances. Les développeurs peuvent facilement identifier la structure de la base de données. Nous pouvons également examiner comment la requête va récupérer les données.

Articles recommandés

Ceci est un guide de la clé étrangère en SQL. Nous discutons ici des règles et des exemples de clé étrangère en SQL avec la syntaxe. Vous pouvez également consulter les articles suivants pour en savoir plus -

  1. Vues SQL
  2. Types de jointures dans SQL Server
  3. Qu'est-ce que PL / SQL?
  4. Contraintes SQL Server
  5. 6 principaux types de jointures dans MySQL avec des exemples