Trackin
php010
Nous allons maintenant faire une petite introduction sur les bases de données. En effet, les bases de données prennent aujourd'hui une proportion tellement importante dans les sites WEB que vous devriez sûrement en utiliser un jour pour un site développé en PHP.Pour l'information, sachez que ce site WEB utilise pratiquement que les données d'une base de données (tous les tutoriaux, les astuces, etc... sont contenus dans une base de données).
De plus, en utilisant les bases de données, vous allez vraiment découvrir toutes les possibilités d'un environnement PHP / MySQL.
Cette introduction pourra vous paraître vraiment longue et inutile, néanmoins, je vous recommande chaudement de la lire attentivement dans son intégralité. Elle comporte énormément de notions capitales à comprendre.
Prenons un exemple simple et concret : supposons que l'on désire développer une base de données contenant une liste de CD audio. Cette liste de CD sera en fait composée de tous les CD que possède chaque personne d'un groupe d'amis. Et ceci, afin de pouvoir se prêter mutuellement les différents CD, et de savoir exactement qui à quoi comme CD.
On suppose que le groupe d'amis est composé de 3 personnes :
- LA GLOBULE
- Jeremy
- Benoît
Chaque personne a un numéro de téléphone, et chaque personne possède un certain nombre de CD. On prendra aussi en considération le titre de l'album et le nom de l'interprète.
On aurait alors très bien pu obtenir (sous forme d'un tableau) la base de données suivante :
Propriétaire | N. tél | Auteur | Titre |
LA GLOBULE | 06-48-85-20-54 | Cassius | Au rêve |
LA GLOBULE | 06-48-85-20-54 | Daft Punk | Discovery |
Jeremy | 06-48-74-26-01 | Cassius | Au rêve |
Jeremy | 06-48-74-26-01 | Télépopmusik | Genetic world |
Benoît | 06-47-01-59-36 | Clamaran | Release yourself |
Notez bien que ce tableau, en terme de base de données, se nomme une table et que chaque ligne du tableau se nomme un tuple. La première ligne du tableau comporte les attributs de la table (Propriétaire, N. tél, Auteur et Titre sont les attributs de notre table).
Note : une base de données peut contenir plusieurs tables.
Faisons maintenant quelques interrogations sur cette base de données :
Qui possède un album de Cassius ?
>> réponse : LA GLOBULE et Jeremy
Quel est le numéro de téléphone de Benoît ?
>> réponse : 06-47-01-59-36
Quels sont les albums des Daft Punk disponibles dans la liste de CD ?
>> réponse : Discovery (il n'y en a qu'un seul)
A première vue donc, le principe des bases de données est très facilement assimilable.
Il faut également savoir que dans la table d'une base de données, on ne peut pas avoir 2 tuples (donc 2 lignes du tableau) ayant les mêmes éléments (en effet, il serait quand même bête qu'une personne ai un CD en double).
Imaginons maintenant que Jeremy vienne de se faire pick-pocketter son tout nouveau portable (un beau 8310) dans le métro, et qu'il change alors naturellement de numéro.
Supposons que son nouveau numéro est 06-85-98-78-12 et qu'en plus il vienne de s'acheter un nouveau CD : Paradise de Bob Sinclar.
On insère alors une nouvelle ligne dans notre table (un nouveau tuple), et l'on obtient donc :
Propriétaire | N. tél | Auteur | Titre |
LA GLOBULE | 06-48-85-20-54 | Cassius | Au rêve |
LA GLOBULE | 06-48-85-20-54 | Daft Punk | Discovery |
Jeremy | 06-48-74-26-01 | Cassius | Au rêve |
Jeremy | 06-48-74-26-01 | Télépopmusik | Genetic world |
Benoît | 06-47-01-59-36 | Clamaran | Release yourself |
Jeremy | 06-85-98-78-12 | Bob Sinclar | Paradise |
Imaginons maintenant que j'interroge à nouveau ma base de données.
Quel est le numéro de téléphone de Jeremy ?
>> réponse : 06-85-98-78-12 ou bien 06-48-74-26-01
Nous remarquons tout de suite qu'un problème majeur arrive : c'est à dire que Jeremy possède deux numéros de téléphone alors qu'il ne devrait (en théorie) n'en posséder qu'un seul.
Pour remédier a ce problème, il faudrait, par exemple modifier tous les premiers tuples et ainsi mettre à jour le numéro de téléphone de Jeremy.
Dans notre cas, cette solution n'est pas vraiment gênante, en revanche, lorsque la table comporte quelques centaines voir milliers de tuples, c'est déjà beaucoup plus gênant.
En fait, ce problème survient généralement à cause d'une mauvaise conception de la base de données.
En effet, au lieu de créer une seule table contenant toutes les informations, nous aurions du créer deux tables :
- une contenant la liste des CD (Auteur et Titre)
- une contenant les informations des propriétaires des CD (Propriétaire et N. de tel)
Ensuite, il nous resterait a faire un lien entre les tables, nous permettant de savoir qui possède tel ou tel CD.
Mettons cette solution en pratique. On a alors notre table contenant la liste des propriétaires qui aura les attributs suivants :
- numéro du propriétaire
- nom du propriétaire
- numéro de téléphone du propriétaire
Et la table contenant la liste de CD, aura les attributs suivants :
- numéro du propriétaire du CD
- Auteur du CD
- Titre du CD
(Et c'est grâce au numéro du propriétaire que l'on fera la liaison entre les deux tables, l'opération se nommant une jointure)
On aura alors :
N. du propriétaire | Propriétaire | N. tél |
1 | LA GLOBULE | 06-48-85-20-54 |
2 | Jeremy | 06-85-98-78-12 |
3 | Benoît | 06-47-01-59-36 |
N. du propriétaire | Auteur | Titre |
1 | Cassius | Au rêve |
1 | Daft Punk | Discovery |
2 | Cassius | Au rêve |
2 | Télépopmusik | Genetic world |
3 | Clamaran | Release yourself |
2 | Bob Sinclar | Paradise |
En ici, on remarque facilement que si une personne change de numéro de téléphone, et bien nous avons qu'une seule modification à effectuer (vu que chaque numéro de téléphone n'apparaît qu'une fois dans toute la base).
Puis dans ce cas, nous remarquons également que c'est le N. de propriétaire qui effectue la liaison entre les deux tables (c'est à dire la jointure).
En conclusion :
Faites extrêmement attention au moment où vous créer les tables de votre base de données afin de ne pas se retrouver dans une situation où tout retour en arrière serait impossible : visualiser bien votre idée, écrivez sur papier ce dont vous avez réellement besoin pour votre base de données, et tentez au maximum d'éviter d'avoir des redondances dans vos tables.