MySQL …Comprendre une base de données

Vous désirez doter votre site internet d’un forum, d’un livre d’or, ou tout simplement, enregistrer des données sur vos visiteurs ? Les bases de données vont venir à votre secours, elles sont là pour ça !

Mais tout d’abord, qu’est ce qu’une base de données ? Un petit exemple valant mieux qu’un long discours, suivez le guide :

Je veux faire un site contenant une page d’accueil, et une succession de pages, contenant chacune un titre, une brève description de l’article, et l’ article en lui même. Une solution consiste à faire tout le site de manière « statique », en html par exemple. Chaque article aura sa page, écrite dans un fichier html, lui même placé dans un répertoire du site. Pour 2 ou 3 articles, c’est une solution envisageable mais si mon site contient 5000 articles, qu’en est il ? Ca oblige à avoir 5000 fichiers différents sur le disque. Et si l’on veut modifier la couleur de fond d’écran, il faudra ouvrir les 5000 fichiers, pour les modifier un par un. Idem pour les recherches sur mots clé, ou autres.

C’est dommage, d’autant que, tout compte fait, ces fichiers se ressemblent énormément. Ils ont tous un titre, une description, et un article. Or en informatique, on a horreur de faire plusieurs fois la même chose, on cherche toujours à ‘optimiser’, à faciliter la vie du développeur.

Imaginons un tableau ARTICLE :

numéro de l’article titre description article
1 PHP le présent Php, qu’en est-il maintenant ?
2 C++ la nostalgie Pourquoi le C++ est il dépassé ?
3 java le futur Comment java va reconquérir le monde…

etc…

Un fichier irait ‘piocher’ dans ce tableau les informations dont il a besoin, de sorte que, lorsque l’utilisateur demanderait l’article numéro 1, une page contenant le titre, la description et l’article correspondant lui serait fournie, le tout mis en forme et en html. Il n’y aurait ainsi qu’un fichier à modifier pour modifier la couleur de fond d’écran ou autres fioritures, et les recherches seraient également plus rapides, puisqu’il suffirait d’ouvrir un seul tableau au lieu de milliers de fichiers.

Ceci existe, c’est le principe des bases de données.

  • La donnée « 1 », ou la donnée « PHP » s’appelle un champ,
  • la ligne « |1|PHP|le présent|Php, qu’en est-il maintenant ?| » est appelée un enregistrement,
  • l’ensemble ARTICLE, avec ses champs et enregistrements est appelé une table,
  • l’ensemble des tables est appelé une base de données.

De la même façon que l’on a stocké les articles et les titres, on peut stocker toutes sortes d’informations : adresse IP des visiteurs, date/heure des visites sur votre site, un forum, une ‘édito’, etc.

Créer tout cela est relativement simple, c’est pourquoi nous allons passer à l’étape 2.

Faire une jointure entre les tables

Donc, nous avons toujours notre tableau ARTICLE :

numéro de l’article titre description article
1 PHP le présent Php, qu’en est-il maintenant ?
2 C++ la nostalgie Pourquoi le C++ est il dépassé ?
3 java le futur Comment java va reconquérir le monde…

Puisqu’un article a toujours un auteur, j’ai ajouté la colonne ‘nom_auteur, et pour des raisons de place, j’ai enlevé les colonnes description et article. On a donc le tableau suivant :

numero_article titre nom_auteur
1 PHP Anonymus
2 C++ Dan
3 java Anonymus
4 VB.net Dan
5 Perl Anonyms
6 Python Dan

etc…

On s’aperçoit, au premier coup d’oeil, que les auteurs sont toujours les mêmes. Dans notre cas, il n’y en a que 2 (Anonymus et Dan). Lorsque l’on effectuera des recherches sur ‘Anonymus’, par exemple, n’apparaîtront pas les lignes où l’auteur sera ‘anonymus’ ou ‘Anonyms’ (faute de frappe de la part de l’opérateur de saisie, due à la fatigue). De plus, le fait de répéter les mêmes données pèse lourd dans la base de données. Lourd en terme d’espace de stockage, d’espace disque.
Enfin, je peux avoir besoin des données de la colonne ‘nom_auteur’ dans une autre table, la table ‘INFOS_AUTEURS’ par exemple. Or cela obligerait à réécrire les noms des auteurs dans une autre table, avec autant de risques d’erreurs, autant de temps perdu.

La solution

Elle consiste à créer une nouvelle table, la table ‘AUTEURS‘ :

numero_auteur nom_auteur
1 Dan
2 Anonymus
3 Gilbert

etc…

Le problème, maintenant, c’est de faire un lien entre la table AUTEURS et la table ARTICLES. Pour cela, on va utiliser une astuce. Mais tout d’abord, regardons un peu ces deux tables.

S’il est évident de marquer le nom de l’auteur dans la table auteurs, on attribue toujours un numéro, ici le numéro de l’auteur, appelé identifiant. Cet identifiant sert à reconnaître, à identifier l’enregistrement (la ligne) dans la table. En effet, il rend cet enregistrement unique.

Un exemple

Pour une table servant à enregistrer toutes les personnes d’une commune. Si vous voulez vous servir du nom pour ‘identifier’ les personnes, vous aurez des conflits puisque plusieurs personnes possèdent le même nom (toutes les personnes d’une même famille). Si vous voulez vous servir du prénom, il arrive encore que des parents donnent à leurs enfants le prénom du père ou de la mère. Et donc, il y aurait aussi des conflits. Pour la table des ‘habitants’, avec les champs ‘nom’, ‘prénom’, ‘date de naissance’ : Comment rentrer sur la même ligne Martin Jean 05/05/63 et Martin Jean 12/09/85 ??

Donc, il faut un identifiant unique. On choisi des nombres entiers. Ainsi, l’auteur Dan est associé à l’identifiant 1. Il peut y avoir plusieurs auteurs s’appelant Dan. Chacun aura son numéro identifiant. Ainsi, il n’y aura toujours qu’un seul auteur dont l’identifiant sera 1.

Pour lier l’auteur à un article, nous marquerons l’identifiant de l’auteur dans la table article. Ce qui donnera :

numéro de l’article article numéro de l’auteur
1 php 2
2 C++ 1
3 java 2
4 html 3

Pour un article, il y aura toujours un et un seul auteur. Alors qu’un auteur pourra avoir écrit plusieurs articles. Ainsi, l’auteur numéro 2 a écrit l’article numéro 1 et l’article numéro 3. L’auteur numéro 1 aura écrit l’article numéro 2, etc. …

Si l’on veut pouvoir associer plusieurs auteurs à un article ?
Il faudra créer une troisième table qui reprendra les identifiants des deux premières. Ainsi :

  • ARTICLES correspond à la table article
  • AUT_ART correspond à la table auteur_article
  • AUTEURS correspond à la table auteur

La table ARTICLES

numéro_article article
1 php
2 C++
3 java
4 html

La table AUTEURS

numero_auteur nom_auteur
1 Dan
2 Anonymus
3 Gilbert

La table AUT_ART

numéro_article numero_auteur
1 1
1 2
2 1
3 1

Cette dernière structuration des données permet aussi, dans notre exemple, de traiter les articles co-écrits par plusieurs auteurs (article 1 par Anonymus et Dan, dans l’exemple)

Pour comprendre comment extraire ces données, passons à la vitesse supérieure, et au langage SQL.


Commentez l’article « mySQL … comprendre une base de données » sur le forum Webmaster-hub