PHP

Clefs étrangères et relation many to many

Bien construire sa base de données

Avant de lancer PHPmyAdmin, Workbench ou d’autres logiciels pour fabriquer votre base de données, il faut d’abord bien réfléchir aux besoins. Mon premier conseil : prenez une feuille et un crayon et dessiner à quoi va ressembler votre site.

A quoi va ressembler le site ?

Placez tous les éléments, nommez les. Ça vous aidera pour établir le nombre et les noms des colonnes de vos tables.
Sur mon dessin, j’ai dessiné un chat simple où des messages seraient affichés avec juste le pseudo des gens et le texte qu’ils écrivent. J’analyse la situation. Je peux faire :

  • une table avec les données des utilisateurs :
    • id qui sera la clef primaire, unique, pour identifier les utilisateurs
    • pseudo
  • une table avec les données des messages
    • id,
    • texte à afficher,
    • une colonne pour identifier l’utilisateur qui a écrit le message

Structure des tables

Et puis je réfléchis et je me dis que j’aimerais que mes utilisateurs se connectent au chat. Donc je rajoute une colonne email et une colonne password, qui n’est pas visible dans ce que j’ai dessiné mais c’est pour montrer que même en faisant un premier croquis, on ne pense pas à tout. D’où l’importance de bien réfléchir afin de bien construire sa DB.

Pour l’exemple, je vais en rester là mais évidemment, on peut prévoir de rajouter une colonne avec des données temporelles pour savoir à quelle heure ont été postés les messages. On pourrait aussi ajouter une table avec les autorisations, envisager peut-être qu’il y aurait des modérateurs,… Bref, on va pas complexifier ici mais évidemment qu’on peut faire un truc beaucoup plus complet !

Je fais ensuite un croquis avec la structure de mes tables et je réfléchis aux noms des colonnes que je vais mettre dedans.

Première remarque : attention aux noms des colonnes en double ! Voyez sur l’exemple qu’on aurait pu avoir une colonne « id » dans la table structure et dans la table message. Quand on va faire des requêtes incluant les deux tables, comment va-t-on faire pour faire la différence entre les deux ? Le plus simple, c’est de vérifier que les noms des colonnes soient uniques.

Sinon, on peut utiliser les alias.

Fonctionnement des clefs étrangères

Les clefs étrangères servent à faire le lien entre deux tables. Dans notre exemple, on a une table pour les utilisateurs et une table pour les messages. On ne peut pas faire une seule table mais on a besoin de savoir quel utilisateur a écrit un message. Pour lier les deux, on va donc utiliser la clef primaire de la table utilisateur comme clef étrangère.
On pourrait le faire manuellement sans dire à la base de données que les deux colonnes sont liées. Oui, on pourrait. Mais imaginons qu’un utilisateur supprime son compte et qu’on souhaite effacer tous les messages concernés par cet utilisateur, indiquer que la colonne id_user de la table message est une Foreign Key va permettre de paramétrer des options. Par exemple la suppression en cascade : à la suppression d’un utilisateur, on supprime toutes les données relatives à cet utilisateur automatique (ici, tous les messages liés à l’id de l’utilisateur supprimé).

Comparons le tableau dessiné ci-dessus et le premier dessin de l’interface utilisateur. On comprend que le message dont l’ID est 1 a été écrit par l’utilisateur dont l’ID est 2.

Relation Many to Many

Dans notre exemple, un message ne peut être écrit que par un seul utilisateur mais un utilisateur peut écrire plusieurs messages. Voyons un peu avec un autre exemple :

Imaginons un blog : un auteur peur écrire plusieurs articles et un article peut être écrire par plusieurs auteurs. On ne pourra donc pas paramétrer une colonne avec plusieurs données… Comment qu’on fait donc ?

On crée une table intermédiaire qui va stocker autant d’ID auteur qu’on veut relier à autant ID d’articles qu’on veut et vice et versa.

Laisser un commentaire

Articles similaires

Commencez à saisir votre recherche ci-dessus et pressez Entrée pour rechercher. ESC pour annuler.

Retour en haut