Partie 2 · SQL de base
MySQL, le modèle relationnel et l'algèbre
Une base de données est une collection structurée de données (de la liste de courses à l'information d'un réseau d'entreprise). Pour y ajouter, accéder et traiter des données, il faut un SGBD (système de gestion de base de données). MySQL en est un : sa première version est apparue le 23 mai 1995. Son nom vient de My, la fille du cofondateur Monty Widenius ; son dauphin s'appelle Sakila.
- MySQL est relationnel : les données sont stockées dans des tables séparées, avec des règles (un-à-un, un-à-plusieurs, unique, obligatoire ou facultatif…) qui empêchent les données incohérentes, en double, orphelines ou manquantes.
- Le SQL (Structured Query Language) est le langage normalisé le plus courant pour accéder aux bases ; défini par la norme ANSI/ISO, qui évolue depuis 1986 (SQL-92, SQL:1999, SQL:2003).
- MySQL est Open Source (licence GPL) ; une version commerciale existe si la GPL ne convient pas.
Comment on y accède : les clients se connectent par TCP/IP (ou tubes nommés / mémoire partagée sous Windows, sockets Unix), avec des API pour C, C++, Java, Perl, PHP, Python, Ruby…, des connecteurs ODBC, JDBC (Connector/J) ou .NET, et des outils comme mysqldump, mysqladmin ou MySQL Workbench.
Vérifie que tu as compris
Le jargon du modèle relationnel
| Terme | Définition du cours |
|---|---|
| Domaine | ensemble des valeurs d'un attribut |
| Relation | sous-ensemble du produit cartésien d'une liste de domaines : en pratique un tableau à deux dimensions (colonnes = domaines, lignes = tuples), chaque colonne ayant un nom |
| Attribut | une colonne d'une relation, caractérisée par un nom |
| Tuple | liste des valeurs d'une ligne (aussi appelée enregistrement) |
Exemple : la relation Personne a pour attributs nom, prénom, adresse, téléphone. Une relation ressemble à une classe qui n'aurait que des attributs, chaque tuple étant une instance.
L'algèbre relationnelle : trois opérations
| Opération | Effet | Requête du cours |
|---|---|---|
| Projection | garde certaines colonnes | SELECT nom, prénom FROM Personnes |
| Sélection | garde certaines lignes (critère sur les valeurs) | SELECT * FROM Personnes WHERE nom = 'Dupond' |
| Jointure | fabrique une relation à partir de plusieurs, via une colonne pivot | SELECT Personnes.prénom, dernierlivre FROM Personnes, Bibliothèque WHERE Personnes.nom = Bibliothèque.nom |
Pour la jointure, préfixe les colonnes par le nom de la table dès que deux tables ont une colonne du même nom (ambiguïté).
À toi de coder
Vérifie que tu as compris
Où vit MySQL dans une application web ?
Rappel MySQL + PHP (architecture à trois niveaux) : 1) le client demande la page PHP au serveur ; 2) PHP se connecte à MySQL et demande la liste des contacts ; 3) MySQL répond au serveur PHP ; 4) PHP renvoie la page au client en HTML ; 5) le navigateur interprète la page.