Les modèles relationnels
MCD : Modèle Conceptuel des Données
Origine et intérêt de Merise
Elle repose sur trois niveaux de modélisation :
| Niveau | Objectif | Représentation | |--------|----------|----------------| | MCD | Décrire les données indépendamment de la technique | Entités, associations | | MLD | Adapter les entités au modèle relationnel | Tables, clés | | MPD | Implémenter les structures dans un SGBD réel | SQL, index, contraintes |
Le Modèle Conceptuel des Données
Un MCD représente les entités, leurs attributs, et les associations entre elles.
- Entité : élément principal du système (rectangle).
- Attribut : information propre à une entité.
- Association : relation entre entités (losange).
- Cardinalité : nombre de liens possibles entre entités.
Exemple guidé : de l’énoncé au MCD
Étapes de modélisation
- Entités :
Etudiant,Cours,Enseignant - Associations :
Inscription(avecnote),Dispense - Cardinalités :
Etudiant(0,n) ←→Inscription←→ (0,n)CoursCours(1,n) ←→Dispense←→ (1,1)Enseignant
MLD : Modèle Logique des Données
Le MLD traduit le MCD en tables relationnelles, prêtes à être implémentées dans un SGBD (MySQL, PostgreSQL...).
Traduction du MCD précédent
Etudiant(idEtudiant PK, nom, prenom)
Cours(idCours PK, intitule, volumeHoraire)
Enseignant(idEnseignant PK, nom, specialite)
Inscription(idEtudiant PK, idCours PK, note,
FOREIGN KEY (idEtudiant) REFERENCES Etudiant,
FOREIGN KEY (idCours) REFERENCES Cours)
Cours(idCours PK, ..., idEnseignant FK)
Intégrité des données
Les systèmes de gestion de bases de données (SGBD) utilisent plusieurs types de contraintes pour garantir cette intégrité. Ces contraintes sont essentielles pour :
- Éviter les incohérences,
- Prévenir les erreurs de saisie,
- Maintenir une structure logique fiable.
Types d’intégrité
Intégrité d’entité
- Aucune ligne ne peut avoir une clé primaire vide (NULL).
- Deux lignes ne peuvent avoir la même valeur de clé primaire.
Exemple :
CREATE TABLE Etudiant (
idEtudiant INT PRIMARY KEY,
nom VARCHAR(50),
prenom VARCHAR(50)
);
Ici,
idEtudiantdoit être unique et non nul pour chaque étudiant.
Intégrité référentielle
Cela assure que les relations entre les tables sont valides.
Exemple :
CREATE TABLE Inscription (
idEtudiant INT,
idCours INT,
FOREIGN KEY (idEtudiant) REFERENCES Etudiant(idEtudiant),
FOREIGN KEY (idCours) REFERENCES Cours(idCours)
);
On ne peut pas inscrire un étudiant ou un cours qui n’existe pas dans la table de référence.
Intégrité de domaine
- Chaque colonne est définie avec un type de données (
INT,VARCHAR,DATE...). - On peut ajouter des contraintes :
NOT NULL,CHECK,DEFAULT, etc.
Exemples :
CREATE TABLE Produit (
idProduit INT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prix DECIMAL(10,2) CHECK (prix >= 0)
);
Ici :
nomest obligatoire (NOT NULL)prixne peut pas être négatif (CHECK)
Normalisation et Formes Normales
Elle repose sur l’identification des dépendances fonctionnelles et la décomposition des relations en formes normales (FN).
Pourquoi normaliser ?
- Éviter les données dupliquées ou contradictoires.
- Améliorer la clarté du modèle.
- Faciliter la maintenance et l’évolutivité.
- Garantir une structure logique fiable.
Première Forme Normale (1NF)
Exemple incorrect (non 1NF) :
| idClient | nom | téléphones | |----------|---------|---------------------| | 1 | Alice | 06 11 22 33 44, 07 55 66 77 88 |
La colonne
téléphonescontient plusieurs valeurs.
Exemple en 1NF :
| idClient | nom | téléphone | |----------|---------|-------------------| | 1 | Alice | 06 11 22 33 44 | | 1 | Alice | 07 55 66 77 88 |
Deuxième Forme Normale (2NF)
Exemple incorrect (non 2NF) :
| idCommande | idProduit | nomProduit | prixUnitaire | |------------|-----------|------------|--------------| | 10 | P01 | Clavier | 40 |
nomProduitetprixUnitairedépendent uniquement deidProduit, pas de la combinaison(idCommande, idProduit).
Solution en 2NF : séparer les produits dans une autre table.
- Table
Commande_Produit:(idCommande, idProduit, quantité) - Table
Produit:(idProduit, nomProduit, prixUnitaire)
Troisième Forme Normale (3NF)
Exemple incorrect (non 3NF) :
| idClient | nomClient | ville | codePostal | |----------|-----------|-----------|------------| | 1 | Alice | Paris | 75000 |
codePostaldépend deville, pas directement de la cléidClient.
Solution en 3NF : isoler la ville dans une table dédiée.
- Table
Client:(idClient, nomClient, ville) - Table
Ville:(ville, codePostal)
Résumé des formes normales
| Forme normale | Condition principale | Objectif | |---------------|-----------------------------------------------------------|--------------------------------------------| | 1NF | Aucune colonne multivaluée ou répétée | Atomicité des valeurs | | 2NF | Aucune dépendance partielle | Éliminer les redondances liées aux clés | | 3NF | Aucune dépendance transitive | Meilleure structure logique et cohérence |