Les Bases de Données Relationnelles
1. Introduction aux Bases de Données Relationnelles
Une base de données relationnelle est un système organisé pour stocker, gérer et récupérer des données en utilisant des tables. Chaque table contient des lignes (enregistrements) et des colonnes (attributs). Les relations entre les tables sont établies grâce à des clés.
Concepts clés :
- Table : Ensemble de données organisées en lignes et colonnes.
- Clé primaire : Identifiant unique pour chaque enregistrement d'une table.
- Clé étrangère : Colonne qui établit une relation avec la clé primaire d'une autre table.
- SQL : Langage utilisé pour interagir avec les bases de données relationnelles.
2. Les Composants d'une Base de Données Relationnelle
2.1 Tables
Une table est une structure qui contient des données. Chaque table a un nom et des colonnes avec des types de données définis (ex. : INT, VARCHAR, DATE).
Exemple : Table "Acheteurs"
| acheteur_id (PK) |
nom_complet |
courriel |
date_adhesion |
| 1 |
Luc Martin |
luc.martin@example.com |
2023-01-15 |
| 2 |
Sophie Lambert |
sophie.lambert@example.com |
2023-02-20 |
2.2 Clés
Les clés garantissent l'intégrité des données et les relations entre tables.
- Clé primaire (PK) : Identifie de manière unique chaque enregistrement. Ex. :
acheteur_id.
- Clé étrangère (FK) : Relie une table à une autre. Ex. :
acheteur_id dans une table "Ventes" qui référence la table "Acheteurs".
2.3 Types de Données
Les colonnes d'une table ont des types de données spécifiques :
INT : Nombre entier (ex. : 1, 100).
VARCHAR(n) : Chaîne de caractères de longueur variable (ex. : "Luc").
DATE : Date (ex. : "2023-01-15").
DECIMAL(p,d) : Nombre décimal (ex. : 19.99).
3. Création d'une Base de Données
Pour illustrer, nous allons créer une base de données pour une boutique en ligne avec les tables suivantes :
- Acheteurs : Informations sur les acheteurs.
- Ventes : Détails des ventes effectuées.
- Articles : Liste des articles disponibles.
- LignesVente : Relation entre ventes et articles (table d'association).
3.1 Schéma SQL pour Créer les Tables
-- Création de la base de données
CREATE DATABASE Magasin;
-- Utilisation de la base de données
USE Magasin;
-- Table Acheteurs
CREATE TABLE Acheteurs (
acheteur_id INT PRIMARY KEY AUTO_INCREMENT,
nom_complet VARCHAR(50) NOT NULL,
courriel VARCHAR(100) UNIQUE,
date_adhesion DATE
);
-- Table Articles
CREATE TABLE Articles (
article_id INT PRIMARY KEY AUTO_INCREMENT,
nom_article VARCHAR(100) NOT NULL,
prix_unitaire DECIMAL(10,2) NOT NULL,
quantite_stock INT NOT NULL
);
-- Table Ventes
CREATE TABLE Ventes (
vente_id INT PRIMARY KEY AUTO_INCREMENT,
acheteur_id INT,
date_vente DATE,
FOREIGN KEY (acheteur_id) REFERENCES Acheteurs(acheteur_id)
);
-- Table LignesVente (table d'association)
CREATE TABLE LignesVente (
vente_id INT,
article_id INT,
quantite INT NOT NULL,
PRIMARY KEY (vente_id, article_id),
FOREIGN KEY (vente_id) REFERENCES Ventes(vente_id),
FOREIGN KEY (article_id) REFERENCES Articles(article_id)
);
3.2 Explication du Schéma
AUTO_INCREMENT : Génère automatiquement des ID uniques.
NOT NULL : Oblige la colonne à avoir une valeur.
UNIQUE : Garantit que les valeurs sont uniques (ex. : courriel).
FOREIGN KEY : Établit une relation avec une autre table.
4. Insertion de Données
Une fois les tables créées, nous pouvons insérer des données avec la commande INSERT INTO.
Exemple : Insertion de données
-- Insertion dans Acheteurs
INSERT INTO Acheteurs (nom_complet, courriel, date_adhesion)
VALUES
('Luc Martin', 'luc.martin@example.com', '2023-01-15'),
('Sophie Lambert', 'sophie.lambert@example.com', '2023-02-20');
-- Insertion dans Articles
INSERT INTO Articles (nom_article, prix_unitaire, quantite_stock)
VALUES
('Laptop', 1299.99, 30),
('Souris', 29.99, 150);
-- Insertion dans Ventes
INSERT INTO Ventes (acheteur_id, date_vente)
VALUES
(1, '2023-03-01'),
(2, '2023-03-02');
-- Insertion dans LignesVente
INSERT INTO LignesVente (vente_id, article_id, quantite)
VALUES
(1, 1, 1),
(1, 2, 3),
(2, 1, 1);
5. Requêtes SQL pour Interroger les Données
SQL permet de récupérer, modifier ou supprimer des données avec des requêtes.
5.1 Sélection de Données (SELECT)
Exemple : Lister tous les acheteurs
SELECT * FROM Acheteurs;
Résultat :
| acheteur_id |
nom_complet |
courriel |
date_adhesion |
| 1 |
Luc Martin |
luc.martin@example.com |
2023-01-15 |
| 2 |
Sophie Lambert |
sophie.lambert@example.com |
2023-02-20 |
5.2 Jointures (JOIN)
Les jointures permettent de combiner des données de plusieurs tables.
Exemple : Afficher les ventes avec les noms des acheteurs
SELECT v.vente_id, a.nom_complet, v.date_vente
FROM Ventes v
JOIN Acheteurs a ON v.acheteur_id = a.acheteur_id;
Résultat :
| vente_id |
nom_complet |
date_vente |
| 1 |
Luc Martin |
2023-03-01 |
| 2 |
Sophie Lambert |
2023-03-02 |
5.3 Agrégation
Les fonctions d'agrégation comme COUNT, SUM, AVG permettent de calculer des statistiques.
Exemple : Calculer le total des quantités vendues par article
SELECT a.nom_article, SUM(lv.quantite) as total_quantite
FROM LignesVente lv
JOIN Articles a ON lv.article_id = a.article_id
GROUP BY a.nom_article;
Résultat :
| nom_article |
total_quantite |
| Laptop |
2 |
| Souris |
3 |
6. Modification et Suppression de Données
6.1 Mise à Jour (UPDATE)
Exemple : Mettre à jour le stock d'un article
UPDATE Articles
SET quantite_stock = quantite_stock - 1
WHERE article_id = 1;
6.2 Suppression (DELETE)
Exemple : Supprimer un acheteur
DELETE FROM Acheteurs
WHERE acheteur_id = 1;
Attention : Supprimer un acheteur peut échouer si des ventes sont associées (contrainte de clé étrangère).
7. Normalisation des Bases de Données
La normalisation est un processus pour éliminer les redondances et organiser les données efficacement. Elle suit plusieurs formes normales (1NF, 2NF, 3NF).
- 1NF : Toutes les colonnes doivent conteniralski des valeurs atomiques (pas de listes).
- 2NF : Éliminer les dépendances partielles (les colonnes non-clés doivent dépendre entièrement de la clé primaire).
- 3NF : Éliminer les dépendances transitives (les colonnes non-clés ne doivent pas dépendre d'autres colonnes non-clés).
Exemple : Table non normalisée
| vente_id |
nom_acheteur |
articles |
| 1 |
Luc |
Laptop, Souris |
Problème : La colonne "articles" viole la 1NF (liste de valeurs).
Solution : Créer une table séparée pour les articles vendus (comme LignesVente).
8. Bonnes Pratiques
- Utilisez des noms de tables et colonnes clairs et descriptifs.
- Appliquez des contraintes (clés primaires, clés étrangères,
NOT NULL) pour garantir l'intégrité.
- Normalisez vos bases de données pour éviter les redondances.
- Indexez les colonnes fréquemment utilisées dans les requêtes pour améliorer les performances.
- Sauvegardez régulièrement votre base de données.
9. Exemple Complet : Application Web
Imaginons une application web pour gérer la boutique. Voici un exemple de requête SQL pour afficher un récapitulatif des ventes :
SELECT
v.vente_id,
a.nom_complet AS acheteur,
art.nom_article,
lv.quantite,
(lv.quantite * art.prix_unitaire) AS total
FROM Ventes v
JOIN Acheteurs a ON v.acheteur_id = a.acheteur_id
JOIN LignesVente lv ON v.vente_id = lv.vente_id
JOIN Articles art ON lv.article_id = art.article_id;
Résultat :
| vente_id |
acheteur |
nom_article |
quantite |
total |
| 1 |
Luc Martin |
Laptop |
1 |
1299.99 |
| 1 |
Luc Martin |
Souris |
3 |
89.97 |
| 2 |
Sophie Lambert |
Laptop |
1 |
1299.99 |
10. Conclusion
Les bases de données relationnelles sont essentielles pour organiser et gérer des données dans des applications modernes. En maîtrisant les concepts comme les tables, les clés, les requêtes SQL et la normalisation, vous pouvez concevoir des bases de données performantes et fiables.