Qu'est-ce qu'une clé étrangère ?

Avril 2013

Dans une table d'une base de données MySQL, une clé étrangère est un champ dont la valeur fait référence à la clé primaire d'une autre table.

On va prendre l'exemple de finalclap, qui contient des tutoriels qui appartiennent à des catégories (Photoshop, After Effects, PHP...) :

CREATE TABLE `categorie` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`titre` VARCHAR(250) NULL DEFAULT NULL,
	`description` TEXT NULL,
	PRIMARY KEY (`id`)
);
CREATE TABLE `tuto` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`categorie_id` INT(11) NULL DEFAULT NULL COMMENT 'FK id de la catégorie',
	`titre` VARCHAR(150) NOT NULL COLLATE 'utf8_general_ci',
	`contenu` TEXT NOT NULL COLLATE 'utf8_general_ci',
	PRIMARY KEY (`id`)
);

Dans la table tuto, le champs categorie_id (tuto.categorie_id) fait référence au champ id de la table categorie (categorie.id). C'est ça qui permet de rattacher un tutoriel à une catégorie.

On dit que le champs categorie_id est une clé étrangère (Foreign key). Les clés étrangères matérialisent les relations entre les tables.

Contrainte d'intégrité

Le système de base de données peut veiller à l'intégrité des données grâce aux contraintes d'intégrité (ou dépendance fonctionnelle). On appelle ça un SGBDR (système de gestion de base de données relationnelle).

Qu'est-ce que l'intégrité référentielle des données ?

Les données sont intégres lorsqu'elles sont cohérentes. Je m'explique : si on reste sur l'exemple de finalclap avec la table categorie et la table tuto, chaque tuto doit faire référence à une catégorie qui existe dans la table catégorie.

Si un tuto est rattaché à une catégorie qui n'existe pas (par exemple, la catégorie "Trucmuche" #45587, alors les données ne sont pas cohérentes, les données sont "pourries".

MyISAM et InnoDB

Pour créer une contrainte d'intégrité dans MySQL, il faut utiliser le moteur InnoDB. En effet, le moteur par défaut : MyISAM, ne gère pas les clé étrangères.

Après avoir lu additionner les x plus grands chiffres avec excel vous en saurez d'avantage sur ce sujet.

L'ajout d'une clé étrangère à une table se fait à l'aide d'une requête SQL :

ALTER TABLE `tuto` ADD CONSTRAINT `FK_tuto_categorie` FOREIGN KEY (`categorie_id`) REFERENCES `categorie` (`id`);

Chaque contrainte d'intégrité porte un nom, en général on utilise des conventions pour ça : le nom commence par le préfixe FK_ (comme Foreign Key) puis le nom de la table source, et enfin le nom de la table cible (celle à laquelle on fait référence).

La valeur NULL

Il arrive qu'on ne souhaite pas de référence pour certains enregistrements, par exemple : un tuto qui n'appartiendrait à aucune catégorie. Dans ce cas, il faut donner au champ tuto.categorie_id la valeur NULL.

NULL est une constante qui représente le vide (c'est différent de 0 pour un entier et d'une chaîne vide, NULL est une constante qui sert précisément à représenter l'absence de donnée, indépendamment du type du champ).

Encore faim ? allez lire ça : style street !

0 commentaire
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré