Le but de ce document est de montrer comment définir des clés étrangères en utilisant l'interface graphique de phpmyadmin. Les différentes étapes sont illustrées graphiquement sur la base de données "bibliothèque" qui contient trois tables : Livre(codeBarre,titre,auteur,genre,résumé),Client(numClient,nom,prénom,adresse,téléphone) et Emprunter(numLivre,numClient,date)
Pour commencer, vous devez vérifier que toutes les tables ont été stockées avec le moteur de stockage InnoDB. Pour le vérifier, cliquez sur le nom de votre base de données. Comme le montre la figure ci-dessous, vous devez alors visualiser un tableau récapitulant le nom des tables enregistrées dans votre base de données, ainsi que d'autres renseignements comme le nombre d'enregistrements, le type, l'interclassement ... Le type correspond au moteur de stockage utilisé pour stocker la table dans la base de données.
Si le type de chacune de vos tables est innoDB, vous pouvez passer directement à l'étape 3, pour les autres vous passez à l'étape 2
Si vous êtes dans le cas illustré par la figure ci-dessous où la table test a été stocké sur myIsam.
Vous devez alors cliquer sur la table que vous souhaitez modifier (symbolisé par le 1 sur la figure ci-dessous) puis cliquer sur l'onglet opérations (symbolisé par le 2 sur la figure ci-dessous).
L'option permettant de modifier le type de stockage est alors disponible comme le montre la figure suivante. Il vous suffit de sélectionner InnoDB parmi les choix proposés.
Reprenons notre exemple de bibliothèque. Logiquement un livre ne peut être emprunté que s'il existe dans la bibliothèque. De la même façon, on ne peut insérer un nouvel emprunt dans la table Emprunter que si la valeur donnée à l'attribut numLivre référence un livre dans la table Livre. C'est pourquoi l'attribut numLivre est une clé étrangère qui référence la clé primaire codeBarre de la table Livre. Pour spécifier cette contrainte de référence en utilisant phpmyadmin, commencez par cliquer sur la table Emprunter (1) (ou sur la table où un attribut doit en référencer un autre), puis cliquez sur "Gestion des relations" (2). La figure suivante vous indique où cliquer :
Il est alors possible d'ajouter des références pour l'attribut numLivre (1) et de spécifier comment cette contrainte s'applique sur la suppression d'un enregistrement ou sur la mise à jour d'un enregistrement(2).
Phpmyadmin vous propose d'ailleurs les attributs pouvant être référencés (1). Sur notre exemple, nous avons tous les attributs de chaque table qui ont été déclaré comme appartenat à la clé de la table et dont le type est le même que celui de numLivre(c'est-à-dire int). Il nous suffit donc de choisir l'attribut codeBarre de la table Livre.
Comme vous pouvez le voir il est possible de référencer un attribut de la même table : numLivre pourrait référencer numClient. Dans notre exemple de bibliothèque cela n'a aucun sens. Mais imaginez une table employé qui stocke l'ensemble des employés d'une société et dont les attributs sont (numEmployé, nom, prénom, chef). Le chef d'un employé étant lui même un employé, il est alors pratique de pouvoir faire un lien entre l'attribut chef et l'attribut numEmployé afin de spécifier que le chef d'un employé est obligatoirement un employé. Ceci permettra des mises à jour cohérentes.