Origine des systèmes de gestion de base de données
Le stockage persistant des données repose traditionnellement sur des fichiers, limités à une machine physique. Cette approche présente des limitations fondamentales :
# Problème 1 : Centralisation excessive
# Une panne matérielle entraîne l'indisponibilité totale du système.
# L'échelle verticale atteint rapidement ses limites physiques.
# La distribution des composants sur plusieurs machines devient nécessaire.
# Problème 2 : Intégrité des données
# La répartition des composants nécessite un accès partagé aux données.
# L'accès concurrentiel aux fichiers distants génère des risques d'incohérence.
# Une solution : séparer données et applications avec un serveur dédié.
Concepts fondamentaux
Donnée : Représentation numérique, textuelle ou binaire d'entités. Exemple structuré :
nom, genre, age # Structure
'Alice', 'F', 28 # Enregistrement
Base de données : Entrepôt structuré de données numériques, optimisé pour :
- Réduire la redondance
- Garantir l'indépendance des données
- Permettre l'extensibilité
SGBD (Système de Gestion de Base de Données) : Logiciel assurant :
- Organisation et stockage
- Accès sécurisé et performant
- Gestion des transactions (ex: MySQL, Oracle, PostgreSQL)
Présentation de MySQL
SGBDR open-source (Oracle Corporation), structuré en architecture client-serveur :
# Types de SGBD :
Relationnels : MySQL, PostgreSQL (structure tabulaire)
Non-relationnels : MongoDB, Redis (modèle clé-valeur)
Principes du langage SQL
Langage structuré pour interagir avec les SGBDR, catégorisé en :
DDL : CREATE, ALTER, DROP (structure)
DML : SELECT, INSERT, UPDATE (manipulation)
DCL : GRANT, REVOKE (contrôle d'accès)
Opérations fondamentales
-- Bases de données
CREATE DATABASE projet1 CHARACTER SET utf8;
SHOW DATABASES;
-- Tables
CREATE TABLE Clients (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(30) NOT NULL
);
-- Données
INSERT INTO Clients (nom) VALUES ('Martin');
SELECT * FROM Clients WHERE id = 1;
Manipulation avancée
-- Jointures
SELECT *
FROM Commandes
LEFT JOIN Clients ON Commandes.client_id = Clients.id;
-- Agrégations
SELECT ville, AVG(salaire)
FROM Employes
GROUP BY ville
HAVING AVG(salaire) > 3000;
-- Sous-requêtes
SELECT nom
FROM Produits
WHERE prix > (SELECT AVG(prix) FROM Produits);
Fonctinos essentielles
-- Chaînes
UPDATE Produits SET reference = CONCAT('REF_', reference);
-- Agrégats
SELECT categorie, MAX(stock) FROM Inventaire GROUP BY categorie;
-- Temporelles
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 7 DAY);
Exemple analytique
-- Analyse de ventes
SELECT
p.nom,
SUM(c.quantite * p.prix) AS chiffre_affaires
FROM Commandes c
JOIN Produits p ON c.produit_id = p.id
GROUP BY p.nom
ORDER BY chiffre_affaires DESC
LIMIT 5;