Par Valentin Brosseau / @c4software
La base de données est un vaste sujet. Nous avons ici une introduction à ce qu'il faut connaitre au minimum pour avancer dans nos différents projets.
Les premières bases de données (en Anglais database) sont apparues en 1960
Chaque jour, 2,5 quintillions de bytes de données sont générés.
Objet de toutes les convoitises

Le minimum à connaitre, c'est une représentation universelle.
Technique pour représenter une base de données.
⚠️ Étape très importante, c'est la base de notre projet. ⚠️
| Table |
|---|
| #idTable (int) |
| nom (varchar) |
| prénom (int) |
#)La clé primaire sert à identifier une ligne de manière unique.
La clé étrangère permet de gérer des relations entre plusieurs tables, et garantissent la cohérence des données.
L'INDEX est utilisé pour accélérer les requêtes indispensable à la création de clés primaires et de clés étrangères.
⚠️ Vous devez toujours avoir une clé ⚠️
Les cardinalités seront les liens entre nos tables
| Cardinalités | Usages |
|---|---|
| 0..1 | Aucune ou une instance |
| 1 | Une instance exactement |
| 0..* ou * | Aucune ou plusieurs instances |
| 1..* | Une instance ou plusieurs (au moins une) |
Pour réaliser le MCD/MLD nous avons plusieurs solutions :
🤓 J'aime bien l'approche papier et un crayon.
Pourquoi ? Tout simplement pour ne pas être polluer par l'outil 👋.
Des Utilisateurs (Identifiant, Nom, Prénom, Date de naissance, Sexe, Code Pays).
Des pays (Code Pays, Nom).

Compliqué? Pas d'inquiétude, nous allons en refaire plusieurs.
Combinaison possible CASCADE, SET NULL, SET DEFAULT et NO ACTION

PHPMyAdmin est très complet et permet de tout faire. Mais ce n'est pas le seul outil qui permet d'administrer une base de données.
Nous avons également :
Je vous propose de tester DBeaver
Nous avons un langage « universel » pour accéder / manipuler une base de données. Ce langage est découpé en 4 grandes catégories.
| Catégorie | Mot-clé | Usage |
|---|---|---|
| Définition d'une base | CREATE, ALTER, TRUNCATE, DROP, RENAME |
Structure de la base |
| Catégorie | Mot-clé | Usage |
|---|---|---|
| Manipulation des données | INSERT, UPDATE, DELETE, MERGE |
Gestion des données en base |
| Catégorie | Mot-clé | Usage |
|---|---|---|
| Transaction | COMMIT, ROLLBACK |
Groupement d'opérations |
| Catégorie | Mot-clé | Usage |
|---|---|---|
| Contrôle d'accès | GRANT, REVOKE |
Droit d'accès aux données |
| Catégorie | Mot-clé | Usage |
|---|---|---|
| Accès aux données | SELECT |
Récupération d'enregistrements de table(s) |
L'obtention de données se réalise avec la commande.
SELECTToujours formée de la même manière à savoir :
SELECT quoi FROM votreTable WHERE condition(s);quoi : Ce que vous souhaitez obtenir, * pour l'ensemble, sinon nom_colonne séparé par des virgules.table : La table que vous souhaitez requêter.condition(s) : La ou les condition(s) que vous souhaitez appliquer à votre récupération de données.Exemple de table
| #idTable | nom | prenom | age | pays |
|---|---|---|---|---|
| 1 | Brosseau | Valentin | 33 | FR |
| 2 | Doe | John | 14 | US |
| 3 | Bernard | Michel | 56 | FR |
-- Récupère l'ensemble des utilisateurs
SELECT * FROM utilisateurs;
-- Utilisateur de plus de 18ans
SELECT * FROM utilisateurs WHERE age > 18;
-- Utilisateurs de plus de 18ans et de France
SELECT * FROM utilisateurs WHERE age > 18 AND pays = "FR";
-- Nom et Prénom des Utilisateurs
SELECT nom, prenom FROM utilisateurs;| Liste des opérateurs de conditions | |
|---|---|
| = | Égal à |
| > | Supérieur à |
| < | Inférieur à |
| => | Strictement supérieur |
| >= | Strictement inférieur |
| != | Différent de |
| Liste des opérateurs de conditions | |
|---|---|
| BETWEEN | Entre deux valeurs WHERE age BETWEEN 30 AND 50; |
| LIKE | Recherche WHERE nom LIKE 'val%'; |
| IN | Plusieurs valeurs WHERE pays IN ('FRA','USA'); |
base de données et notre première table grâce à PHPMyAdmin.
-- Première page (0 à 10)
SELECT * FROM utilisateurs LIMIT 10 OFFSET 0;
-- Seconde page (10 à 20)
SELECT * FROM utilisateurs LIMIT 10 OFFSET 10;
--- …Trier les résultat
-- Trier page age croissante
SELECT * FROM utilisateurs ORDER BY age ASC;
-- Trier page age décroissante
SELECT * FROM utilisateurs ORDER BY age DESC;Éviter la redondance / doublons vous vous souvenez ?
Cette opération en SQL est appelée une jointure. Nous avons plusieurs façons de joindre les données.

Le choix dépend des données et des opérations que vous souhaitez faire.
Mais sachez que dans 90% du temps ce que vous souhaitez faire c'est un LEFT JOIN.
pays) elle contiendra la liste des pays en lien avec la table utilisateurs créés précédemment.| #code | nom | iso_code |
|---|---|---|
| FR | France | FRA |
| DE | Allemagne | DEU |
| IT | Italie | ITA |
Autrement que via PHPMyAdmin, tel que vous allez le faire en PHP.
Via la commande INSERT
-- Ajout de certains champs
insert into utilisateurs (nom, prenom, age) values (1, 'Test'), (2, 'Insert'), (3, 22);
-- Tous les champs
INSERT INTO utilisateurs VALUES (99,'Test','Insert',12, 'IT');Via la commande UPDATE
UPDATE utilisateurs SET name = 'valentin' WHERE name = 'Valentin-Update';
UPDATE utilisateurs SET name = 'Valentine' WHERE id = 1;DELETE FROM utilisateurs WHERE id = 1;Attention !!! si vous oubliez le WHERE vous allez vider l'ensemble de la table. (Et aucun retour en arrière possible)
Testons ensemble.
À mon avis PDO est doit-être votre choix par défaut dans le cas d'un nouveau projet.

Le code suivant pourra vous servir dans l'ensemble de vos projets
utils/db.php:
// Cette partie est à customiser
$server = "localhost";
$db = "bart";
$user = "root";
$passwd = "";
// Fin de la partie customisable
// Cette partie est générique à l'ensemble de vos projets utilisant une base de données.
$dsn = "mysql:host=$server;dbname=$db";
$pdo = new PDO($dsn, $user, $passwd);utils/db.php dans les pages ou c'est nécessaire.