Introduction
Une base de données permet de stocker, organiser, rechercher et modifier des informations de manière structurée.
Exemples :
- une liste de clients ;
- un stock de produits ;
- une gestion d’hôtel ;
- une vidéothèque ;
- une liste d’employés ;
- des archives administratives.
Une base de données est souvent utilisée avec un SGBD, c’est-à-dire un Système de Gestion de Bases de Données.
Exemples de SGBD :
- Microsoft Access ;
- MySQL ;
- MariaDB ;
- PostgreSQL ;
- SQLite ;
- Oracle Database.
8.1 Modéliser une base de données à partir d’une situation concrète
1. Qu’est-ce qu’une base de données relationnelle ?
Une base de données relationnelle organise les données sous forme de tables.
Une table ressemble à un tableau.
Exemple : table Clients
| id_client | nom | prénom | |
|---|---|---|---|
| 1 | Dupont | Marie | marie@mail.com |
| 2 | Martin | Lucas | lucas@mail.com |
Chaque ligne représente un enregistrement.
Chaque colonne représente un champ.
Vocabulaire important
| Terme | Définition |
|---|---|
| Table | Ensemble de données sur un même sujet |
| Enregistrement | Une ligne dans une table |
| Champ | Une colonne dans une table |
| SGBD | Logiciel qui permet de gérer une base de données |
| Client de base de données | Logiciel ou interface permettant d’accéder à la base |
2. La clé primaire
Une clé primaire est un champ qui permet d’identifier de manière unique chaque enregistrement.
Exemple :
| id_client | nom | prénom |
|---|---|---|
| 1 | Dupont | Marie |
| 2 | Dupont | Marie |
Même si deux personnes ont le même nom et prénom, leur id_client est différent.
La clé primaire est donc généralement un identifiant unique comme :
id_client;id_produit;id_commande;id_employé.
3. La clé étrangère
Une clé étrangère est un champ qui fait référence à la clé primaire d’une autre table.
Exemple :
Table Clients
| id_client | nom |
|---|---|
| 1 | Dupont |
| 2 | Martin |
Table Commandes
| id_commande | date_commande | id_client |
|---|---|---|
| 101 | 2026-05-12 | 1 |
| 102 | 2026-05-13 | 2 |
Dans la table Commandes, le champ id_client est une clé étrangère.
Il permet de savoir quel client a passé quelle commande.
4. La jointure
Une jointure permet de relier plusieurs tables entre elles.
Exemple : on veut afficher les commandes avec le nom du client.
Au lieu d’avoir seulement ceci :
| id_commande | date_commande | id_client |
|---|---|---|
| 101 | 2026-05-12 | 1 |
On veut obtenir ceci :
| id_commande | date_commande | nom |
|---|---|---|
| 101 | 2026-05-12 | Dupont |
Pour cela, on relie la table Commandes à la table Clients grâce au champ id_client.
5. Pourquoi éviter les redondances ?
Une redondance signifie qu’une même information est répétée plusieurs fois inutilement.
Mauvais exemple :
| commande | client | adresse | produit |
|---|---|---|---|
| 1 | Dupont | Rue A | Ordinateur |
| 2 | Dupont | Rue A | Souris |
| 3 | Dupont | Rue A | Clavier |
L’adresse du client est répétée plusieurs fois.
Meilleure solution :
Table Clients
| id_client | nom | adresse |
|---|---|---|
| 1 | Dupont | Rue A |
Table Commandes
| id_commande | id_client |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
Cela évite :
- les doublons ;
- les erreurs ;
- les pertes de temps ;
- les incohérences.
6. Choisir les bons types de données
Chaque champ doit avoir un type adapté.
| Type de donnée | Exemple | Utilisation |
|---|---|---|
| Texte | Dupont | Nom, prénom, adresse |
| Nombre entier | 15 | Quantité, identifiant |
| Nombre décimal | 19,99 | Prix, montant |
| Date | 2026-05-12 | Date de commande |
| Booléen | Oui/Non | Actif, payé, disponible |
| test@mail.com | Adresse email |
Exemple :
Table Produits
| Champ | Type |
|---|---|
| id_produit | entier |
| nom_produit | texte |
| prix | décimal |
| stock | entier |
| disponible | booléen |
7. Modéliser une base de données
Modéliser une base de données signifie réfléchir à son organisation avant de la créer.
Il faut se poser plusieurs questions :
- Quelles informations dois-je stocker ?
- Quelles sont les grandes catégories d’informations ?
- Quelles tables dois-je créer ?
- Quels champs dois-je mettre dans chaque table ?
- Quelle est la clé primaire de chaque table ?
- Quelles relations existent entre les tables ?
- Comment éviter les répétitions inutiles ?
8. Exemple : gestion d’une vidéothèque
Situation : on veut gérer une vidéothèque avec des clients, des films et des emprunts.
Tables possibles
Table Clients
| id_client | nom | prénom |
|---|
Table Films
| id_film | titre | genre | année |
|---|
Table Emprunts
| id_emprunt | id_client | id_film | date_emprunt | date_retour |
|---|
Relations
Un client peut faire plusieurs emprunts.
Un film peut être emprunté plusieurs fois.
La table Emprunts relie donc les clients et les films.
8.2 Exploiter une base de données
1. Qu’est-ce que SQL ?
SQL signifie Structured Query Language.
C’est un langage utilisé pour :
- créer des tables ;
- ajouter des données ;
- rechercher des données ;
- modifier des données ;
- supprimer des données.
SQL est utilisé dans de nombreux SGBD comme MySQL, MariaDB, PostgreSQL ou SQLite.
2. DDL : langage de définition des données
Le DDL sert à créer ou modifier la structure de la base.
Exemples de commandes DDL :
CREATE TABLE: créer une table ;ALTER TABLE: modifier une table ;DROP TABLE: supprimer une table.
Exemple : créer une table
CREATE TABLE Clients (
id_client INT PRIMARY KEY,
nom VARCHAR(50),
prenom VARCHAR(50),
email VARCHAR(100)
);
Explication :
id_clientest un nombre entier ;PRIMARY KEYindique la clé primaire ;VARCHAR(50)signifie texte de maximum 50 caractères.
3. Ajouter des données
Pour ajouter un enregistrement, on utilise INSERT INTO.
INSERT INTO Clients (id_client, nom, prenom, email)
VALUES (1, 'Dupont', 'Marie', 'marie@mail.com');
4. Consulter des données
Pour consulter les données, on utilise SELECT.
Afficher toute une table
SELECT *
FROM Clients;
Le symbole * signifie : afficher tous les champs.
Afficher seulement certains champs
SELECT nom, prenom
FROM Clients;
5. Faire une recherche avec un critère
On utilise WHERE.
SELECT *
FROM Clients
WHERE nom = 'Dupont';
Cette requête affiche uniquement les clients dont le nom est Dupont.
6. Recherche avec plusieurs critères
On peut utiliser AND et OR.
Exemple avec AND
SELECT *
FROM Produits
WHERE prix < 50 AND stock > 0;
Cette requête affiche les produits :
- dont le prix est inférieur à 50 ;
- et dont le stock est supérieur à 0.
Exemple avec OR
SELECT *
FROM Produits
WHERE categorie = 'Livre' OR categorie = 'DVD';
Cette requête affiche les produits qui sont dans la catégorie Livre ou DVD.
7. Trier les résultats
On utilise ORDER BY.
SELECT *
FROM Produits
ORDER BY prix ASC;
ASC signifie ordre croissant.
SELECT *
FROM Produits
ORDER BY prix DESC;
DESC signifie ordre décroissant.
8. Les opérateurs de groupe
Les opérateurs de groupe permettent de faire des calculs.
| Fonction | Rôle |
|---|---|
COUNT() | Compter |
SUM() | Additionner |
AVG() | Calculer une moyenne |
MIN() | Trouver la plus petite valeur |
MAX() | Trouver la plus grande valeur |
Compter les produits
SELECT COUNT(*)
FROM Produits;
Calculer la somme des stocks
SELECT SUM(stock)
FROM Produits;
Calculer le prix moyen
SELECT AVG(prix)
FROM Produits;
Trouver le prix le plus bas
SELECT MIN(prix)
FROM Produits;
Trouver le prix le plus élevé
SELECT MAX(prix)
FROM Produits;
9. Utiliser GROUP BY
GROUP BY permet de regrouper les résultats.
Exemple : calculer le nombre de produits par catégorie.
SELECT categorie, COUNT(*)
FROM Produits
GROUP BY categorie;
Résultat possible :
| categorie | COUNT(*) |
|---|---|
| Livre | 12 |
| DVD | 8 |
| Informatique | 5 |
10. Les jointures en SQL
Une jointure permet de relier deux tables.
Exemple :
Table Clients
| id_client | nom |
|---|---|
| 1 | Dupont |
Table Commandes
| id_commande | id_client | date_commande |
|---|---|---|
| 101 | 1 | 2026-05-12 |
Requête avec jointure
SELECT Commandes.id_commande, Commandes.date_commande, Clients.nom
FROM Commandes
JOIN Clients
ON Commandes.id_client = Clients.id_client;
Cette requête affiche les commandes avec le nom du client.
11. Modifier des données
Pour modifier des informations, on utilise UPDATE.
UPDATE Clients
SET email = 'nouveau@mail.com'
WHERE id_client = 1;
Attention : il faut toujours mettre un WHERE.
Sans WHERE, toutes les lignes seraient modifiées.
12. Supprimer des données
Pour supprimer un enregistrement, on utilise DELETE.
DELETE FROM Clients
WHERE id_client = 1;
Attention : sans WHERE, toute la table serait vidée.
DELETE FROM Clients;
Cette requête supprime tous les clients.
Exemple complet : gestion d’un hôtel
Situation
Un hôtel veut gérer :
- ses clients ;
- ses chambres ;
- ses réservations.
Tables
Table Clients
| Champ | Type | Rôle |
|---|---|---|
| id_client | INT | Clé primaire |
| nom | VARCHAR | Nom du client |
| prenom | VARCHAR | Prénom du client |
| VARCHAR | Email du client |
Table Chambres
| Champ | Type | Rôle |
|---|---|---|
| id_chambre | INT | Clé primaire |
| numero | INT | Numéro de chambre |
| type | VARCHAR | Simple, double, suite |
| prix_nuit | DECIMAL | Prix par nuit |
Table Reservations
| Champ | Type | Rôle |
|---|---|---|
| id_reservation | INT | Clé primaire |
| id_client | INT | Clé étrangère |
| id_chambre | INT | Clé étrangère |
| date_debut | DATE | Début du séjour |
| date_fin | DATE | Fin du séjour |
Création des tables en SQL
CREATE TABLE Clients (
id_client INT PRIMARY KEY,
nom VARCHAR(50),
prenom VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE Chambres (
id_chambre INT PRIMARY KEY,
numero INT,
type VARCHAR(50),
prix_nuit DECIMAL(10,2)
);
CREATE TABLE Reservations (
id_reservation INT PRIMARY KEY,
id_client INT,
id_chambre INT,
date_debut DATE,
date_fin DATE,
FOREIGN KEY (id_client) REFERENCES Clients(id_client),
FOREIGN KEY (id_chambre) REFERENCES Chambres(id_chambre)
);
Ajouter des données
INSERT INTO Clients
VALUES (1, 'Dupont', 'Marie', 'marie@mail.com');
INSERT INTO Chambres
VALUES (1, 101, 'Double', 90.00);
INSERT INTO Reservations
VALUES (1, 1, 1, '2026-06-01', '2026-06-05');
Consulter les réservations avec le nom du client
SELECT Reservations.id_reservation, Clients.nom, Chambres.numero, Reservations.date_debut, Reservations.date_fin
FROM Reservations
JOIN Clients ON Reservations.id_client = Clients.id_client
JOIN Chambres ON Reservations.id_chambre = Chambres.id_chambre;
À retenir
Une base de données relationnelle est composée de tables.
Chaque table contient des champs et des enregistrements.
Une clé primaire identifie chaque ligne de manière unique.
Une clé étrangère permet de relier deux tables.
Une jointure permet d’exploiter les relations entre plusieurs tables.
SQL permet de créer, consulter, modifier et supprimer des données.
Il faut organiser les données correctement pour éviter les redondances.
Les fonctions comme COUNT, SUM, AVG, MIN et MAX permettent d’obtenir des statistiques sur les données.


