Blog Navicat

Guide sur les contraintes des clés étrangères MySQL 2 Juin 2023 par Robert Gravelle

Au cours du processus de normalisation, les groupes de champs qui représentent une entité distincte sont supprimés d'une table plus grande et/ou plus centrale vers une table distincte. Les champs communs (généralement des identifiants) sont ensuite utilisés pour maintenir leur relation. Nous pouvons voir un exemple ci-dessous :

film_id_fk (34K)

Dans une base de données relationnelle, l'intégrité référentielle entre les tables est renforcée à l'aide de contraintes de clé étrangère.

Ce blog explique le fonctionnement des clés étrangères ainsi que la façon de créer une contrainte de clé étrangère dans MySQL à l'aide de Navicat 16 for MySQL .

Concernant la relation entre le film et l’inventaire.

Le modèle que nous avons vu dans l’intro, décrit une relation un-à-plusieurs entre les tables de film et d'inventaire dans laquelle une entité de film (1 ligne) peut être liée à zéro ou plusieurs entités (lignes) dans la table d’inventaire.

La table du film est appelée table parent ou table référencée, et la table d'inventaire est appelée table enfant ou table de référencement. Ainsi, les colonnes de clé étrangère de la table enfant font souvent référence aux colonnes de clé primaire de la table parent.

Dans cet exemple, nous nous concentrons uniquement sur une seule relation. En fait, une table peut avoir plusieurs clés étrangères où chaque clé étrangère fait référence à une clé primaire des différentes tables parents.

Une fois qu'une contrainte de clé étrangère est en place, les colonnes de clé étrangère de la table enfant doivent avoir la ligne correspondante dans les colonnes de clé parent de la table parent ou les valeurs de ces colonnes de clé étrangère doivent être NULL. Par exemple, chaque ligne de la table d'inventaire possède un film_id qui existe dans la colonne film_id de la table film. Plusieurs lignes de la table d'inventaire peuvent avoir le même film_id.

Dans la section suivante, nous allons créer une contrainte de clé étrangère pour cette relation dans Navicat 16 for MySQL.

Création d'une contrainte de clé étrangère dans Navicat

Dans Navicat, vous trouverez les contraintes de clé étrangère dans l'onglet « Clés étrangères » du Concepteur de table. Pour créer une nouvelle contrainte de clé étrangère, ouvrez la table parent - dans ce cas, le film - dans le Concepteur de table et cliquez sur le bouton « Ajouter une clé étrangère ». Cela créera une nouvelle ligne dans la liste des clés étrangères :

new_fk_on_film_table (39K)

Ensuite, sélectionner la table « film » dans le menue déroulant, la table « Inventory » comme table de référence et finalement le champ « film_id » comme champ de référence.

new_fk_on_film_table_with_fields_populated (44K)

L'étape suivante consiste à choisir les actions « On delete » et « On update ». MySQL prend en charge cinq options référentielles différentes, comme suit :

  • CASCADE : il est utilisé lorsque nous supprimons ou mettons à jour une ligne de la table parent, les valeurs des lignes correspondantes dans la table enfant seront automatiquement supprimées ou mises à jour.
  • SET NULL : Il est utilisé lorsque nous supprimons ou mettons à jour une ligne de la table parent, les valeurs des colonnes de clé étrangère dans la table enfant sont définies sur NULL.
  • RESTRICT : il est utilisé lorsque nous supprimons ou mettons à jour une ligne de la table parent qui a une ligne correspondante dans la table de référence (enfant), MySQL ne permet pas de supprimer ou de mettre à jour des lignes dans la table parent.
  • NO ACTION : C'est similaire à RESTRICT. Mais il présente une différence : il vérifie l’intégrité référentielle après avoir tenté de modifier la table.
  • SET DEFAULT : L'analyseur MySQL reconnaît cette action. Cependant, les tables InnoDB et NDB ont toutes deux rejeté cette action.

Suivons l'exemple de la FK existant et choisissons une action On Delete of RESTRICT et une action On Update of CASCADE :

new_fk_on_film_table_with_action_fields_populated (46K)

Enfin, cliquez sur le bouton Save pour créer la nouvelle contrainte de clé étrangère. Notez que Navicat créera le nom pour vous si vous ne remplissez pas le champ Name.

Conclusion

Les clés étrangères jouent un rôle essentiel dans le maintien de l'intégrité référentielle entre les tables. En tant que tel, il convient d’en créer un pour chaque relation de table. Navicat 16 for MySQL facilite la gestion de vos contraintes de clé étrangère sans avoir à écrire de commandes SQL.

Partager
Archives du blog