Aller au contenu principal
bddLes modèles relationnels

Les modèles relationnels

Objectifs du Chapitre

Comprendre pourquoi on modélise avant de coder

Lire un énoncé et identifier les entités, relations et cardinalités

Construire un MCD clair et le traduire en MLD selon des règles précises

Comprendre les trois types d'intégrité des données

Appliquer les formes normales pour éliminer la redondance

Où on va

C'est le chapitre qui décide de la suite. Une base mal modélisée reste mal modélisée : on peut toujours réécrire une requête, on ne peut pas rattraper une table qui mélange deux notions. Tu vas apprendre à passer d'un énoncé en français à un MCD, puis du MCD à un MLD prêt à devenir du SQL, et à repérer les redondances avant qu'elles ne deviennent des incohérences.

Pourquoi modéliser ?

Avant d'écrire une seule ligne de SQL, il faut réfléchir à la structure des données : quelles informations doit-on stocker ? Comment sont-elles liées ? Quelles règles doivent être respectées ?

Construire une base de données sans modèle, c'est comme construire une maison sans plan d'architecte : on avance vite au début, puis tout s'effondre.

La méthode Merise propose une démarche en trois niveaux :

NiveauObjectifReprésentationActeur
MCD, Modèle ConceptuelDécrire le "quoi" sans penser à la techniqueEntités, relations, cardinalitésAnalyste / Client
MLD, Modèle LogiqueTraduire en tables relationnellesTables, clés primaires, clés étrangèresConcepteur
MPD, Modèle PhysiqueImplémenter dans un SGBD réelSQL, index, contraintes physiquesDéveloppeur
À retenir

Le MCD se construit sans penser à SQL. On décrit le monde réel avec ses objets et ses liens. Le passage technique vient ensuite, avec le MLD.

MCD : Modèle Conceptuel des Données

Les quatre composants fondamentaux

Un MCD est composé de quatre briques :

Entité

Une entité représente un objet ou un acteur du monde réel que le système doit mémoriser. Elle est représentée par un rectangle.

Critère : si on peut en dresser une liste et stocker des informations dessus, c'est probablement une entité.

Exemples

Exemples : Client, Produit, Commande, Enseignant, Cours

Attribut

Un attribut est une propriété d'une entité. C'est une information simple et atomique (une seule valeur).

Exemples

Exemples pour Client : idClient, nom, email, dateNaissance

Association (Relation)

Une association exprime un lien entre deux entités (ou plus). Elle est représentée par un losange.

Exemples : Passe (entre Client et Commande), Enseigne (entre Enseignant et Cours), Habite (entre Personne et Ville)

Cardinalité

La cardinalité indique combien de fois une entité peut participer à une association. Elle s'écrit (min, max) de chaque côté de l'association.

Lecture d'un MCD

Modèle conceptuel de données
Client
idClient
nom
email
0,N
Passe
1,1
Commande
idCommande
dateCommande
montantTotal

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Lecture : Un client peut passer 0 à N commandes. Une commande est passée par exactement 1 client.

Les cardinalités en détail

Les cardinalités se lisent toujours du côté de l'entité vers l'association : "cette entité participe à cette association au minimum X fois et au maximum Y fois."

CardinalitéSignificationExemple concretQuestion à se poser
(0,1)Facultatif, au plus une foisUn employé peut avoir 0 ou 1 voiture de fonction"Peut ne pas avoir de..."
(1,1)Obligatoire, exactement une foisUne commande appartient à exactement 1 client"A toujours exactement un..."
(0,N)Facultatif, zéro ou plusieursUn auteur peut avoir écrit 0 ou plusieurs livres"Peut avoir plusieurs..."
(1,N)Obligatoire, au moins une foisUn cours a au moins 1 étudiant inscrit"A toujours au moins un..."
Astuce pour lire les cardinalités

Lisez chaque cardinalité comme une phrase : placez-vous du côté de l'entité et lisez vers l'association.

Méthode : "Un(e) [entité A] peut/doit participer à [relation] ... fois."

Pour [Auteur] --(1,N)-- <Ecrit> --(1,1)-- [Livre] :
→ Un auteur écrit au moins 1 livre (1,N)
→ Un livre est écrit par exactement 1 auteur (1,1)

Les trois types de relations

La combinaison des cardinalités de chaque côté détermine le type de relation :

TypeCardinalitésExempleConséquence en MLD
1, 1(1,1), (1,1) ou (0,1), (1,1)Une personne a un seul passeportClé étrangère dans l'une des deux tables
1, N(1,1), (0,N) ou (1,N)Un département contient plusieurs employésClé étrangère dans la table "N"
N, M(0,N), (0,N) ou (1,N), (1,N)Des étudiants s'inscrivent à des coursTable de liaison

Visualiser les trois types

Modèle conceptuel de données
Relation 1-1
Personne
1,1
Possede
0,1
Passeport
Relation 1-N
Departement
1,N
Contient
1,1
Employe
Relation N-M
Etudiant
0,N
Inscription
note
0,N
Cours

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Relations réflexives

Une relation peut lier une entité à elle-même. On parle de relation réflexive (ou récursive).

Exemples de relations réflexives
Modèle conceptuel de données
Un employé peut superviser d'autres employés
Employe
idEmploye
nom
0,N
Supervise
0,1
Employe
Des personnes peuvent être amies entre elles
Personne
0,N
EstAmieDe
0,N
Personne

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Traduction en MLD : une relation réflexive N-M génère une table de liaison avec deux clés étrangères pointant vers la même table, avec des noms de rôles différents.

Modèle logique de données
Employe
idEmploye
nom
prenom
Supervise
idSuperviseurEmploye
idSubordonneEmploye

clé primaire clé étrangère, avec la table visée

Les attributs d'association

Certains attributs n'appartiennent ni à une entité ni à l'autre, mais à la relation elle-même. Ils décrivent un fait qui n'existe que lorsque les deux entités sont liées.

Attribut de relation

Modèle conceptuel de données
Etudiant
0,N
Inscription
note, dateInscription
0,N
Cours

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

La note n'appartient pas à l'étudiant seul (il a des notes différentes dans chaque cours), ni au cours seul. Elle existe uniquement dans le contexte de l'inscription.

Méthode

Comment reconnaître un attribut de relation

Posez-vous la question : "Cet attribut a-t-il un sens sans la relation ?"
Si la réponse est non, c'est un attribut de l'association.

Construire un MCD à partir d'un énoncé

Construire un MCD depuis un texte suit une démarche méthodique en quatre étapes.

Étape 1, Lire et annoter le texte

Chercher :

  • Les noms → potentielles entités (personnes, objets, lieux, événements)
  • Les verbes → potentielles associations
  • Les quantificateurs ("un seul", "plusieurs", "au moins un") → cardinalités
Astuce pratique

Surlignez les noms en jaune, les verbes en vert, les quantificateurs en orange.
Posez-vous toujours : "Qui ? Quoi ? Combien de fois ?"

Étape 2, Identifier les entités

Une entité = quelque chose que le système doit mémoriser et à propos duquel on a plusieurs informations.

ExempleEntité ?Raison
Client✅ OuiOn stocke son nom, email, adresse...
Commande✅ OuiOn stocke sa date, son montant, son statut...
Rouge (couleur)❌ NonC'est un attribut de Produit, pas une entité
Achat (action ponctuelle)⚠️ DépendSi on a besoin de le tracer, oui ; sinon, c'est une relation

Étape 3, Identifier les associations et cardinalités

Une association lie deux entités. Elle est souvent portée par un verbe de l'énoncé.

Pour fixer la cardinalité, posez la question dans les deux sens :

"Un client peut passer combien de commandes ?" → (0,N) côté Client "Une commande appartient à combien de clients ?" → (1,1) côté Commande

Phrase dans l'énoncéCardinalité suggérée
"Un seul / exactement un"(1,1)
"Au moins un / toujours au moins un"(1,N)
"Peut avoir plusieurs / zéro ou plusieurs"(0,N)
"Au plus un / optionnel"(0,1)

Étape 4, Définir les attributs

Chaque entité possède des attributs : les informations à stocker pour chaque occurrence.

Règles à respecter :

  • Les attributs doivent être atomiques (une seule valeur par cellule).
  • L'identifiant (id...) doit être unique, numérique et sans signification métier, pas le numéro de sécurité sociale, ni l'email.
  • Un même attribut ne doit pas apparaître dans plusieurs entités sans raison.
AttributType recommandéExemple
nomVARCHAR(50)"Durand"
dateNaissanceDATE"2007-05-21"
idEtudiantINT AUTO_INCREMENT1024
emailVARCHAR(100)"alice@mail.fr"
actifBOOLEANtrue ou false
prixDECIMAL(10,2)19.99
Pièges classiques à éviter
  • Stocker une liste dans un champ : "cours=Maths,Physique" → créer une relation N-M à la place.
  • Dupliquer un attribut : mettre nomClient dans Commande → utiliser une clé étrangère.
  • Confondre entité et attribut : Ville peut être un attribut (simple) ou une entité (si on stocke code postal, région, etc.).
  • Oublier l'identifiant : chaque entité doit avoir un identifiant unique.

Exemple guidé pas à pas

Énoncé

Une école gère ses enseignants, ses étudiants, et les cours proposés.
Chaque étudiant peut s'inscrire à plusieurs cours. Chaque inscription donne lieu à une note.
Chaque cours est dispensé par un seul enseignant, mais un enseignant peut enseigner plusieurs cours.

Étape 1, Annotation :

"Une école gère ses enseignants (entité), ses étudiants (entité), et les cours (entité) proposés. Chaque étudiant peut s'inscrire (association) à plusieurs (0,N) cours. Chaque inscription donne lieu à une note (attribut de relation). Chaque cours est dispensé (association) par un seul (1,1) enseignant, mais un enseignant peut enseigner plusieurs (0,N) cours."

Étape 2, Entités : Etudiant, Cours, Enseignant

Étape 3, Associations et cardinalités :

AssociationEntité ACard. ACard. BEntité BAttribut
InscriptionEtudiant(0,N)(0,N)Coursnote
DispenseEnseignant(1,N)(1,1)Cours,

Étape 4, Attributs :

  • Etudiant : idEtudiant, nom, prenom, dateNaissance
  • Cours : idCours, intitule, volumeHoraire
  • Enseignant : idEnseignant, nom, prenom, specialite

MCD final :

Modèle conceptuel de données
Enseignant
idEnseignant
nom
prenom
specialite
1,N
Dispense
1,1
Cours
idCours
intitule
volumeHoraire
0,N
Inscription
note
0,N
Etudiant
idEtudiant
nom
prenom
dateNaissance

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

MLD : Modèle Logique des Données

Le MLD traduit le MCD en tables relationnelles, prêtes à être implémentées dans un SGBD.

Règles de passage MCD → MLD

Les règles sont systématiques selon le type de relation :

Règle 1, Chaque entité devient une table

Entité [Etudiant] (idEtudiant, nom, prenom)
  → Table Etudiant(idEtudiant PK, nom, prenom)

Règle 2, Relation 1-1 : clé étrangère dans l'une des deux tables

On place la clé étrangère du côté de l'entité dont la cardinalité est (0,1) ou (1,1) à la même extrémité que la plus petite cardinalité.

Modèle conceptuel de données
Personne
1,1
Possede
0,1
Passeport

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Se traduit par :

Modèle logique de données
Passeport
idPasseport
idPersonnePersonne

clé primaire clé étrangère, avec la table visée

Règle 3, Relation 1-N : clé étrangère dans la table "N"

La clé étrangère va dans la table du côté (N).

Modèle conceptuel de données
Departement
1,N
Contient
1,1
Employe

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Se traduit par :

Modèle logique de données
Employe
idEmploye
idDepartementDepartement

clé primaire clé étrangère, avec la table visée

Règle 4, Relation N-M : table de liaison

La relation devient une nouvelle table avec les deux clés étrangères en clé primaire composite. Les attributs de la relation rejoignent cette table.

Modèle conceptuel de données
Etudiant
0,N
Inscription
note
0,N
Cours

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Se traduit par :

Modèle logique de données
Inscription
idEtudiantEtudiant
idCoursCours
note

clé primaire clé étrangère, avec la table visée

Règle 5, Relation réflexive N-M : table de liaison avec rôles

Modèle conceptuel de données
Employe
0,N
Supervise
0,1
Employe

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

Se traduit par :

Modèle logique de données
Supervise
idSuperviseurEmploye
idSubordonneEmploye

clé primaire clé étrangère, avec la table visée

Tableau récapitulatif

Type de relationTraduction MLDOù va la clé étrangère ?
1, 1Clé étrangère dans une tableCôté (0,1) de préférence
1, NClé étrangère dans la table NDans la table côté (N)
N, MNouvelle table de liaisonLes deux clés en PK composite
N, M avec attributTable de liaison + colonnesAttributs dans la table de liaison
Réflexive N-MTable de liaison auto-référencéeDeux FK vers la même table

Application sur l'exemple "École"

Modèle logique de données
Enseignant
idEnseignant
nom
prenom
specialite
Cours
idCours
intitule
volumeHoraire
idEnseignantEnseignant
Etudiant
idEtudiant
nom
prenom
dateNaissance
Inscription
idEtudiantEtudiant
idCoursCours
note

clé primaire clé étrangère, avec la table visée

Pourquoi idEnseignant va dans Cours (et non l'inverse) ?

La relation est 1-N : un enseignant enseigne plusieurs cours, un cours est enseigné par un seul enseignant. La clé étrangère va dans la table côté "1" de l'entité qui reçoit plusieurs : Cours porte idEnseignant.

Intégrité des données

Définition : L'intégrité désigne l'ensemble des règles qui garantissent que les données restent valides, cohérentes et fiables au fil du temps, malgré les insertions, modifications et suppressions.

Intégrité d'entité

Chaque enregistrement doit être identifiable de manière unique.

  • La clé primaire ne peut jamais être NULL.
  • Deux lignes ne peuvent avoir la même valeur de clé primaire.
CREATE TABLE Etudiant (
  idEtudiant INT PRIMARY KEY AUTO_INCREMENT,  -- unique, jamais NULL
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) NOT NULL
);

Intégrité référentielle

Une clé étrangère doit toujours pointer vers une valeur qui existe dans la table référencée.

requete.sql
Résultat
>_ Prêt à exécuter…
ComportementON DELETE CASCADEON DELETE RESTRICT
Si l'étudiant est suppriméSes inscriptions sont supprimées aussiErreur, impossible de supprimer
Utilisation typiqueDonnées dépendantes (inscriptions)Données indépendantes (cours)

Intégrité de domaine

Chaque colonne doit respecter un type et des contraintes de valeur.

CREATE TABLE Produit (
  idProduit INT PRIMARY KEY AUTO_INCREMENT,
  nom       VARCHAR(100) NOT NULL,
  prix      DECIMAL(10,2) CHECK (prix >= 0),
  stock     INT DEFAULT 0,
  actif     BOOLEAN DEFAULT TRUE
);
ContrainteRôle
NOT NULLValeur obligatoire
CHECK (...)Condition à respecter
DEFAULTValeur par défaut si non renseignée
UNIQUEPas deux fois la même valeur dans cette colonne

Normalisation et Formes Normales

Pourquoi normaliser ?

Imaginez une table qui stocke toutes les informations d'une commande dans une seule ligne :

idCommandeclientvilleproduitprixqte
1AliceParisClavier402
2AliceParisSouris151
3BobLyonClavier401

Problèmes :

  • Si Alice déménage, il faut modifier toutes ses commandes → anomalie de mise à jour
  • Si on supprime la commande 3, on perd le prix du Clavier → anomalie de suppression
  • On ne peut pas ajouter un produit sans créer une commande → anomalie d'insertion

La normalisation élimine ces problèmes en décomposant les tables selon des règles précises.

Dépendances fonctionnelles

Dépendance fonctionnelle

On dit que B dépend fonctionnellement de A (noté A → B) si, pour chaque valeur de A, il existe une seule valeur possible de B.

Exemples :
idEtudiant → nom : un id d'étudiant détermine un seul nom
idProduit → prixUnitaire : un id de produit détermine un seul prix
ville → codePostal : une ville détermine un seul code postal (approximativement)

Les dépendances fonctionnelles sont le fondement des formes normales.

Première Forme Normale (1NF)

1NF, Règle

Chaque cellule contient une et une seule valeur atomique. Pas de listes, pas de groupes répétés dans une colonne.

Avant (non 1NF) :

idCommandeproduits
1Clavier, Souris, Écran
2Clavier

Après (1NF) :

idCommandeproduit
1Clavier
1Souris
1Écran
2Clavier

Autre violation 1NF, colonnes répétées :

idClientproduit1produit2produit3
1ClavierSouris,

→ Même problème : on ne peut pas ajouter un 4e produit sans modifier la structure.

Deuxième Forme Normale (2NF)

2NF, Règle

La table est en 1NF et chaque attribut non-clé dépend de la totalité de la clé primaire, pas d'une partie seulement (pas de dépendance partielle).

La 2NF ne concerne que les tables avec une clé primaire composite.

Avant (non 2NF), clé = (idCommande, idProduit) :

idCommandeidProduitnomProduitprixUnitairequantite
10P01Clavier402
10P02Souris151
11P01Clavier403

Problème : nomProduit et prixUnitaire dépendent seulement de idProduit, pas de (idCommande, idProduit). Si le prix du clavier change, il faut mettre à jour plusieurs lignes.

Après (2NF), on sépare les attributs selon leur dépendance :

idProduit (PK)nomProduitprixUnitaire
P01Clavier40
P02Souris15
idCommande (PK)idProduit (PK, FK)quantite
10P012
10P021
11P013

Troisième Forme Normale (3NF)

3NF, Règle

La table est en 2NF et aucun attribut non-clé ne dépend d'un autre attribut non-clé (pas de dépendance transitive).

Avant (non 3NF) :

idClient (PK)nomClientvillecodePostal
1AliceParis75001
2BobLyon69001

Problème : codePostal dépend de ville, pas de idClient directement. Chaîne : idClient → ville → codePostaldépendance transitive

Après (3NF) :

idClient (PK)nomClientville
1AliceParis
2BobLyon
ville (PK)codePostal
Paris75001
Lyon69001

Résumé des formes normales

FormeRègleAnomalie éliminée
1NFValeurs atomiques, pas de colonnes répétéesDonnées multivaluées non structurées
2NFPas de dépendance partielle à la cléRedondance liée aux clés composites
3NFPas de dépendance transitiveRedondance en chaîne entre attributs
À retenir, les trois questions
  • 1NF : "Est-ce qu'une cellule peut contenir plusieurs valeurs ?" → Si oui, séparer.
  • 2NF : "Cet attribut dépend-il de toute la clé, ou d'une partie seulement ?" → Si partiel, déplacer.
  • 3NF : "Cet attribut dépend-il d'un autre attribut non-clé ?" → Si oui, extraire dans une table séparée.

Exemple complet : système scolaire avec tutorat

Énoncé

Un établissement scolaire souhaite gérer ses élèves, ses classes et ses enseignants.
Chaque élève est inscrit dans une seule classe.
Chaque classe est encadrée par un enseignant responsable. Un enseignant peut être responsable de plusieurs classes, ou d'aucune.
L'école organise un système de tutorat : certains enseignants accompagnent individuellement certains élèves dans un rôle défini (ex : "référent", "soutien").
Un élève peut avoir été inscrit plusieurs années de suite dans la même classe (redoublement).

Entités et attributs

EntitéAttributsRemarque
EleveidEleve, nom, prenom, dateNaissance
ClasseidClasse, nomClasseEx : "5A", "6B"
EnseignantidEnseignant, nom, prenom, dateEmbauche

Relations et cardinalités

RelationDeCard.Card.VersAttributs
EstInscritEleve(1,N)(1,1)Classeannee (redoublement)
ResponsableDeEnseignant(0,N)(1,1)Classe,
TutoratEnseignant(0,N)(0,N)Eleverole

MCD

Modèle conceptuel de données
Le cursus : un enseignant est responsable d'une classe, où des élèves sont inscrits
Enseignant
0,N
ResponsableDe
1,1
Classe
1,N
EstInscrit
annee
1,1
Eleve
Le tutorat, qui relie directement un enseignant à un élève, hors de la classe
Enseignant
0,N
Tutorat
role
0,N
Eleve

Rectangle : entité, identifiant souligné. Losange : relation. Les couples min,max portés sur les pattes se lisent depuis l'entité la plus proche.

MLD

Modèle logique de données
Enseignant
idEnseignant
nom
prenom
dateEmbauche
Classe
idClasse
nomClasse
idEnseignantEnseignant
Eleve
idEleve
nom
prenom
dateNaissance
EstInscrit
idEleveEleve
idClasseClasse
annee
Tutorat
idEnseignantEnseignant
idEleveEleve
role

clé primaire clé étrangère, avec la table visée

Pourquoi annee est-il dans la clé primaire de EstInscrit ? Sans annee, un élève ne peut être inscrit qu'une seule fois dans une classe. Pour permettre le redoublement (même élève, même classe, année différente), on l'inclut dans la clé composite.

Synthèse, La démarche de modélisation

  1. Lire le texte : annoter noms (entités), verbes (relations), quantificateurs (cardinalités).
  2. Construire le MCD : entités, attributs, associations, cardinalités.
  3. Traduire en MLD : appliquer les règles selon le type de relation (1-1, 1-N, N-M).
  4. Vérifier la normalisation : 1NF → 2NF → 3NF.
  5. Implémenter en SQL : CREATE TABLE avec clés et contraintes.

Ressources complémentaires