Les modèles relationnels
Objectifs pédagogiques
- Comprendre les concepts fondamentaux d’une base de données relationnelle : table, enregistrement, clé primaire, clé étrangère, relation
- Identifier les propriétés d’intégrité des données : entité, référentielle, domaine
- Comprendre l’origine de la méthode Merise et son intérêt dans la modélisation
- Construire un MCD clair et structuré, puis le traduire en MLD
- Appliquer les règles de normalisation pour limiter la redondance
MCD : Modèle Conceptuel des Données
Origine et intérêt de Merise
Définition
Merise est une méthode de conception française permettant d’analyser et de modéliser les données et les traitements d’un système d’information.
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
[Client]----------------[Commande]
idClient idCommande
nom dateCommande
prenom
Exemple guidé : de l’énoncé au MCD
Énoncé
Une école gère ses enseignants, ses étudiants, et les cours proposés.
Chaque étudiant peut s’inscrire à plusieurs cours.
Chaque cours est dispensé par un seul enseignant, mais un enseignant peut enseigner plusieurs cours.
Chaque inscription donne lieu à une note.
Étapes de modélisation
- Entités :
Etudiant
, Cours
, Enseignant
- Associations :
Inscription
(avec note
), Dispense
- Cardinalités :
Etudiant
(0,n) ←→ Inscription
←→ (0,n) Cours
Cours
(1,n) ←→ Dispense
←→ (1,1) Enseignant
MCD final
[Etudiant]----------------[Cours]----------------[Enseignant]
idEtudiant idCours idEnseignant
nom intitule nom
prenom volumeHoraire specialite
note
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...).
Règles de passage
- Chaque entité devient une
table avec une
clé primaire
- Chaque association avec attribut devient une
table indépendante
- Les relations sont traduites par des
clés étrangères
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
Définition
L’intégrité des données désigne l’ensemble des règles et contraintes mises en place dans une base de données afin d’assurer la
validité, la cohérence et la fiabilité des informations stocké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é
Définition
L'intégrité d'entité garantit que chaque enregistrement dans une table est
identifiable de manière unique à l'aide d'une
clé primaire (primary key).
- 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, idEtudiant
doit être unique et non nul pour chaque étudiant.
Intégrité référentielle
Définition
L'intégrité référentielle garantit que les
valeurs des clés étrangères correspondent à des valeurs
existantes dans une autre table.
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
Définition
L'intégrité de domaine impose des
types, formats et contraintes de valeur pour chaque colonne.
- 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 :
nom
est obligatoire (NOT NULL
)
prix
ne peut pas être négatif (CHECK
)
Normalisation et Formes Normales
Définition
La normalisation est un processus de transformation des schémas de données visant à **réduire la redondance**, **éviter les anomalies** (insertion, suppression, mise à jour) et **garantir la cohérence** des informations dans une base relationnelle.
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)
1NF – Forme Normale 1
Une table est en 1NF si **toutes les valeurs des attributs sont atomiques**, c’est-à-dire **indivisibles**.
Il ne doit y avoir **aucune répétition de colonnes** ou **valeurs multiples dans une même cellule**.
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éphones
contient 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)
2NF – Forme Normale 2
Une table est en 2NF si elle est en 1NF **et** si **chaque attribut non-clé dépend entièrement de la clé primaire** (pas de dépendance partielle).
Exemple incorrect (non 2NF) :
idCommande |
idProduit |
nomProduit |
prixUnitaire |
10 |
P01 |
Clavier |
40 |
nomProduit
et prixUnitaire
dépendent uniquement de idProduit
, 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)
3NF – Forme Normale 3
Une table est en 3NF si elle est en 2NF **et** si **aucun attribut non-clé ne dépend d’un autre attribut non-clé** (pas de dépendance transitive).
Exemple incorrect (non 3NF) :
idClient |
nomClient |
ville |
codePostal |
1 |
Alice |
Paris |
75000 |
codePostal
dépend de ville
, 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 |
Ressources complémentaires