Permettre l'infrastructure de tables liées avec phpMyAdmin

Samuel SAYAG

phpMyAdmin est une interface sous forme de site permettant d'administrer une base de données MySQL.

On peut ainsi créer une base, des tables, des champs, etc. Un artefact utilisé lors de la création d'une base est la relation entre tables.

Il est possible d'utiliser phpMyAdmin pour créer des relations entre tables via l'interface, mais ceci exige de configurer phpMyAdmin, car cette interface n'offre pas directement la possibilité de le faire. Cet article a pour but de montrer rapidement comment s'y prendre.

D'autres options plus ou moins utiles s'offriront à l'utilisateur en plus de la création de relations.

- Titre : Permettre l'infrastructure de tables liées avec phpMyAdmin

- Auteur : Samuel SAYAG

- Parution : 18 janvier 2008

- Mise à jour : 13 décembre 2019

- Licence : Copyright ® 2008 Samuel Sayag. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- I-A. Pour qui c'est fait…

- I-B. … et pour quoi faire…

- II. Installation de phpMyAdmin

- III. Import du script sous phpmyAdmin

- IV. Configuration de l'infrastructure de tables liées

- IV-A. Le mode manuel

- IV-B. Le mode graphique

- IV-B-1. Configurer phpMyAdmin

- IV-B-2. Créer la base

- V. Conclusion

- V-A. La création graphique d'une relation entre tables

- V-B. L'enregistrement de requêtes dans les signets

- V-C. La création de PDF

I - Introduction

I-A - Pour qui c'est fait…

Bonjour à tous, l'idée de ce tutoriel m'est venue après avoir passé une petite soirée à essayer d'avoir sous phpMyAdmin la possibilité de lier deux tables entre elles de manière graphique. Cela peut sans doute paraître idiot pour les personnes avancées, experts qui écrivent couramment le LDD (langage de définition des données, ou DDL (Data Definition Language), mais pour les petits novices qui veulent à tout prix retrouver sous phpMyAdmin les mêmes services que dans Access (ça y est le mot est lâché !), cela peut s'avérer décourageant.

I-B - … et pour quoi faire…

Bref, vous apprendrez uniquement ici à configurer phpMyAdmin pour qu'il puisse (aux dires de la documentation) :

1. Effectuer des relations entre vos tables. Si cela ne vous dit rien, n'allez pas plus loin et lisez plutôt un tutoriel Merise ou UML, et découvrez la « relation » et tous ses secrets (voir ici) ;

2. Mettre en favoris vos requêtes préférées ;

3. Afficher des infobulles sur les champs de vos tables ;

4. Générer un PDF du diagramme de tables de votre base de données (et à afficher amoureusement dans votre chambre :)) ;

5. Stocker des commentaires sur chaque colonne de vos tables ;

6. Avoir un historique SQL lorsque vous travaillez sous phpMyAdmin ;

7. Effectuer les relations décrites au point un en mode graphique.

Voilà c'est tout, d'aucuns diront que c'est déjà ça !

II - Installation de phpMyAdmin

Je ne m'étendrai pas ici sur l'installation de phpMyAdmin qui s'accompagne en général du serveur MySQL, d'Apache et de PHP. Vous pouvez installer ceux-ci séparément, ou avec des installateurs de plus en plus conviviaux.

Une petite liste (non exhaustive) de liens :

1. Séparément, l'excellent tuto que voici ;

2. Un comparatif ici même.

Je vais considérer que vous avez trouvé votre bonheur avec un des liens ci-dessus ou que vous vous êtes débrouillé par vous-même, en tout cas que l'installation est maintenant opérationnelle.

III - Import du script sous phpmyAdmin

Maintenant, nous allons importer cette base vide.

1. Lancez phpmyAdmin si ce n'est déjà fait ;

2. Cette icône permet d'ouvrir le module d'import de code SQL :

Maintenant, nous allons importer cette base vide.

3. Cliquez dessus, vous devriez voir apparaître cette fenêtre :

Figure 1. Fenêtre du module d'import de code SQL

Maintenant, nous allons importer cette base vide.

4. Cliquez sur « Importer les fichiers », puis sur « Parcourir », sélectionnez votre fichier sauvegardé et cliquez sur « Exécuter ».

IV - Configuration de l'infrastructure de tables liées

L'objectif est, maintenant, dans notre base, de pouvoir « associer » un pays à chaque contact. Pour cela, il faut « lier » par une contrainte les deux tables en indiquant au moteur de bases de données que l'identifiant du pays dans la table « contact » doit avoir une des valeurs prises par l'identifiant de la table « pays ».

IV-A - Le mode manuel

Cela peut généralement se faire par une commande dans le goût suivant :

Script de création d'une contrainte de clé étrangère.

-- modifier ma table
ALTER TABLE t_contact
-- ajouter une contrainte d'un nom de mon choix
ADD 'nom_de_ma_contrainte_non_obligatoire'
-- sur la clé (ou le champ) id_pays
FOREIGN KEY 'id_pays'
-- correspondant au champ id_pays de la table pays
REFERENCE t_pays ('id_pays')
-- si j'efface un pays, je ne veux pas que l'on efface mon contact
ON DELETE NO ACTION
-- si l'id du pays est mis à jour, celui de la table contact
-- aussi
ON UPDATE CASCADE

Mais, comme sur plusieurs SGBD actuels, il y a maintenant possibilité de le faire directement de manière graphique.

IV-B - Le mode graphique

Nous allons maintenant installer le module graphique sous phpMyAdmin. Lorsque vous vous placez sous le menu de votre base de données, vous devez voir quelque chose comme ceci :

Lorsque j'ai voulu ajouter la contrainte décrite précédemment, je suis allé naturellement dans « Opération » et j'ai eu la surprise de voir ceci en bas de page (voir figure 3) :

En cliquant « ici » comme ils disent, on apprend en anglais ou en français que les relations entre les tables sont gouvernées par une table que l'on peut ajouter, au choix, dans sa propre base de données ou dans une autre base de données. Le second choix vous laisse la possibilité de répertorier les relations entre tables, mais pour plusieurs bases différentes. C'est une solution qui paraît, a priori, plus propre. Nous allons l'adopter.

Vous avez remarqué qu'au début du tutoriel, il est dit que l'installation va également permettre de mettre en favoris vos requêtes, mettre des infobulles sur les champs de vos tables, générer des PDF, etc. Cela va également se faire grâce à des tables que vous installerez de la même manière que la table de relations.

L'installation du module dans phpMyAdmin va se faire en deux étapes :

1. Créer la base qui accueillera vos relations, vos signets, l'historique SQL, etc. ;

2. Signaler à phpMyAdmin que cette base aura dorénavant cette utilité pour vous.

IV-B-1 - Configurer phpMyAdmin

Nous n'allons, bien sûr pas le faire à la mimine ! Les créateurs de phpMyAdmin ont déjà écrit un script pour nous, un outil d'importation de SQL fonctionnels et les explications pour s'en servir. Nous allons donc en profiter. Allez tout de suite dans le répertoire C:\wamp\apps\phpMyAdmin2.10.1\scripts si vous avez installé wamp à la racine et sinon vous devez sans doute savoir où vous l'avez installé et, le cas contraire, une simple recherche vous y aidera.

Si vous avez une version de MySQL supérieure ou égale à la 4.1.2, localisez le fichier : create_tables_mysql_4_1_2+.sql, dans le cas contraire localisez les deux fichiers : create_tables.sql et upgrade_tables_mysql_4_1_2+.sql. Puis importez-le(s) via le module servant à exécuter du SQL sur votre base de données.

Après importation, vous devez avoir quelque chose comme ceci :

Figure 4. Base de données pour les nouvelles fonctionnalités de phpMyAdmin

IV-B-2 - Créer la base

Éditez le fichier wamp\apps\phpMyAdmin2.10.1\config.inc.php. Ce fichier vous permet de redéfinir, au moment du lancement de phpMyAdmin, la valeur de plusieurs paramètres de cette application. Tous ces paramètres sont mis dans un dictionnaire (ou « map »).

Nous allons donner à certaines de ces variables une valeur en rapport avec la base ainsi que les tables qui viennent d'être créées.

Script du fichier de configuration des paramètres de phpMyAdmin

<?php
/* nom de la base de données qui contient toutes les table modules que vous ajouterez */
$cfg['Servers'][$i]['pmadb']         = 'phpMyAdmin';

/* nom de la table pour la mise en favoris des requêtes*/
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';

/* nom de la table pour la gestion des relations entre les tables de vos bases de données*/
$cfg['Servers'][$i]['relation']      = 'pma_relation';

/* tables des informations sur vos tables (infobulles)*/
$cfg['Servers'][$i]['table_info']    = 'pma_table_info';

/* tables des coordonnées des schémas de tables dans le document pdf*/
$cfg['Servers'][$i]['table_coords']  = 'pma_table_coords';

/* encore une table nécessaire à la génération pdf*/
$cfg['Servers'][$i]['pdf_pages']     = 'pma_pdf_pages';

/* infobulles sur les champs de vos tables*/
$cfg['Servers'][$i]['column_info']   = 'pma_column_info';
/* conservation de l'historique des requêtes*/
$cfg['Servers'][$i]['history']       = 'pma_history';

/* coordonnées des tables enregistrées en mode graphique*/
$cfg['Servers'][$i]['designer_coords']       = 'pma_designer_coords';

Maintenant, il ne vous reste plus qu'à redémarrer votre service de WAMP ou phpMyAdmin afin que vos modifications de configurations puissent être prises en compte.

V - Conclusion

En guise de conclusion, nous allons vérifier la bonne configuration de phpMyAdmin sur trois des fonctionnalités installées : la création d'une relation entre tables, l'enregistrement des requêtes dans des signets, la création de PDF.

Il faut ajouter que malheureusement, dans phpMyAdmin, l'utilisation de ces nouvelles fonctionnalités peut se révéler un rien problématique, car parfois non totalement intuitive.

V-A - La création graphique d'une relation entre tables

Tout d'abord, dans le menu lié à la base de données, vous devez pouvoir désormais compter avec un nouvel onglet « Concepteur ».
Lorsque vous cliquez sur ce menu, une nouvelle interface apparaît, l'ensemble des tables existantes dans la base sur laquelle vous pointez :

Figure 5. Fenêtre de conception graphique

Plusieurs options sont à votre disposition via des icônes. La troisième en partant de la gauche vous permet de créer une relation entre vos deux tables :

1. Cliquez dessus ;

2. Une info bulle vous demande de pointer sur la clé de table référencée ;

3. Cliquez sur le champ clé primaire de la table pays ;

4. Puis une infobulle vous demande de pointer sur la clé étrangère ;

5. Cliquez sur le champ id_pays de la table contact ;

6. Vous devriez voir la fenêtre suivante :

Figure 6. Création de la relation

7. Choisissez ON UPDATE -> CASCADE (si on change le pays d'un contact, l'identifiant référençant le pays doit lui aussi être mis à jour) et ON DELETE -> NO ACTION (nous ne voulons pas effacer un contact même si son pays venait à être effacé) et validez votre choix.

La relation entre les tables est désormais effective (phpMyAdmin vous le confirme d'ailleurs par un message) et seule une erreur de conception peut a priori empêcher qu'elle soit créée (le typage des deux champs liés doit être cohérent par exemple, on ne lie pas un identifiant de type string à un identifiant numérique).

Si vous cliquez sur l'icône de PDF, cela ne produira rien si vous n'avez pas déjà préparé le schéma de votre page PDF (voir plus loin).

V-B - L'enregistrement de requêtes dans les signets

Une autre fonctionnalité offerte est la possibilité d'enregistrer vos requêtes dans des signets. Vous pouvez faire cela depuis l'onglet « SQL », ou « Requête ».

Je ne saurais trop vous conseiller d'utiliser directement l'onglet « SQL », car bien que l'onglet « Requête » permette plus rapidement et sans connaissance du SQL d'obtenir un résultat, il devient par trop rigide dès que l'on aborde des requêtes plus élaborées. De plus, le SQL s'apprend relativement vite.

Pour illustrer cela, nous allons enregistrer la requête qui permet de sélectionner tous les pays de la table pays.

1. Cliquez sur l'onglet « SQL » ;

2. Tapez dans la fenêtre SQL le code SQL suivant :

Requête de sélection des pays présents dans la base

SELECT * FROM ids_t_pays;

3. Cliquez sur « Exécuter » ;

4. Dans la même fenêtre, tout en bas, on vous propose d'enregistrer la requête sous un nom et de valider votre choix :

5. Faites-le puis, lorsque vous reviendrez dans l'onglet SQL après avoir effectué une autre tâche, il vous sera possible de rappeler votre requête pour l'exécuter, la modifier, la visualiser ou l'effacer :
.

Une interface tout à fait similaire est disponible sous l'onglet « Requête ».

V-C - La création de PDF

Soyons clairs, la production de schémas de base de données avec phpMyAdmin ne vaut pas un outil dédié. De plus, vous verrez que l'interface de création de ce PDF n'est pas des plus intuitives.
Néanmoins, cela peut s'avérer pratique dans certaines situations (génération rapide de documentation pour donner un aperçu du schéma de base ou du dictionnaire des données) et si c'est disponible, autant ne pas s'en priver. De plus, la génération est ici automatique, cela gagne du temps quoi qu'on en dise :

1. Sous le menu base de données, cliquez sur l'onglet « Opération » et cliquez sur le lien Préparer le schéma en PDF (il est tout en bas de la page) ;

2. Vous tombez sur une interface peu claire, mais quoi que vous fassiez vous pourrez le modifier donc… N'hésitez pas à expérimenter. Donner le nom de votre page PDF dans le champ prévu à cet effet ;

3. Cliquez sur « Exécuter » ;

4. Votre fenêtre affichera alors plusieurs options qui vous permettront de garnir votre PDF de tout ou partie du schéma de table, de couleurs, d'une grille, etc. Faites votre choix et cliquez sur « Exécuter ». N'oubliez pas de sauvegarder vos tables lorsque vous les incluez dans votre document et utilisez l'éditeur visuel pour les organiser au mieux ;

5. Votre PDF est généré.

Voilà c'est à peu près tout. Vous découvrirez facilement comment ajouter les commentaires aux tables et aux champs à partir de là.