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 :

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.

2.3 Types de Données

Les colonnes d'une table ont des types de données spécifiques :

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 :

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

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).

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

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.