Chapitre 1115 minIntermédiaire
Logiciels pour faire un MCD et rétro-conception
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- choisir un logiciel de modélisation adapté ;
- écrire un MCD en texte avec Mocodo ;
- lire la notation des pattes de corbeau ;
- retrouver le MCD d'une base existante.
3 exercices corrigés
Un logiciel de modélisation dessine le MCD, vérifie sa cohérence et génère le MLD et le script SQL. La rétro-conception fait le chemin inverse : elle part d'une base existante pour retrouver son MLD, puis son MCD. Ce chapitre présente les outils que tu croiseras au BTS SIO (Looping, Mocodo, MySQL Workbench), la notation « pattes de corbeau » qu'utilisent beaucoup d'entre eux, et la méthode pour retrouver le MCD d'une base que tu n'as pas conçue.
Pourquoi un logiciel
Sur papier, un MCD de dix entités se redessine trois fois avant d'être lisible. Un logiciel apporte :
- un schéma propre, qu'on réorganise sans tout effacer, à joindre au dossier d'E6 ou à la documentation d'un projet ;
- des contrôles : une entité sans identifiant, une association sans cardinalité, une propriété en double ;
- la génération du MLD et du script SQL, qui applique les règles de passage sans oubli ;
- la mise à jour : quand le besoin évolue, on modifie le MCD et on régénère.
Il ne pense pas à ta place : il traduit fidèlement un MCD faux en base fausse.
Looping
Looping est un logiciel gratuit de modélisation conceptuelle des données, diffusé par l'Université de Toulouse, très utilisé dans les sections de BTS SIO. La version 4.1 est sortie en mars 2025. Il s'installe sous Windows (sur macOS ou Linux, il faut passer par une couche de compatibilité comme Wine, ou par une machine virtuelle).
Ce qu'il sait faire, et qui correspond à ce cours :
- dessiner un MCD avec la notation de Merise : entités, associations, cardinalités, associations porteuses, réflexives et ternaires, identifiants relatifs, héritage, contraintes entre associations ;
- afficher le MLD correspondant, sous forme graphique ou textuelle ;
- générer le script SQL de création des tables pour plusieurs SGBD ;
- dessiner aussi des diagrammes de classes UML.
Une méthode de travail efficace : saisis d'abord toutes les entités avec leurs propriétés et leurs identifiants, puis les associations et leurs cardinalités ; place les entités pour que les pattes ne se croisent pas ; affiche le MLD et compare-le avec celui que tu attendais ; génère le script, puis complète-le à la main (types précis, CHECK, UNIQUE, ON DELETE) comme au chapitre 9.
Mocodo
Mocodo est un outil libre et gratuit, développé par Aristide Grange à l'Université de Lorraine (version 4.3, sortie en mars 2025). On ne dessine pas : on écrit le MCD dans un petit langage texte, et Mocodo dessine le schéma, le place automatiquement et produit sur demande le MLD, le script SQL ou le diagramme de classes UML. Il s'utilise en ligne sur mocodo.net, sans installation, ou s'installe en local avec Python (pip install mocodo) pour les données confidentielles.
Une entité s'écrit NOM: identifiant, propriété, … (la première propriété est l'identifiant) ; une association NOM, cardinalité ENTITE, cardinalité ENTITE, avec ses propriétés après deux points. Les cardinalités s'écrivent sans virgule : 0N, 11, 1N, 01. Voici le cœur du MCD de Rivelire :
GENRE: code_genre, libelle_genre
APPARTENIR, 11 DOCUMENT, 0N GENRE
DOCUMENT: num_document, titre, annee_parution, resume
CORRESPONDRE, 11 EXEMPLAIRE, 0N DOCUMENT
EXEMPLAIRE: code_barre, date_acquisition, etat
RATTACHER, 11 EXEMPLAIRE, 0N SITE
SITE: code_site, nom_site, adresse_site, ville_site
RESERVER, 0N ADHERENT, 0N DOCUMENT: date_reservation
ADHERENT: num_adherent, nom_adherent, prenom_adherent, date_naissance
Le texte se versionne avec Git, se corrige en deux secondes et se recopie dans un compte rendu. C'est un excellent outil pour s'entraîner : écris le MCD d'un exercice, puis compare le MLD que Mocodo génère avec le tien.
MySQL Workbench
MySQL Workbench est l'outil graphique d'Oracle pour MySQL. Il ne fait pas de MCD au sens de Merise : il dessine des modèles physiques (des tables avec leurs colonnes typées), qu'il appelle diagrammes EER, avec la notation des pattes de corbeau. Trois fonctions sont précieuses :
- Forward Engineer (menu Database) : crée la base à partir du modèle dessiné ;
- Reverse Engineer (menu Database) : dessine le modèle d'une base existante, avec toutes ses clés étrangères ;
- Synchronize Model : compare le modèle et la base, et génère les
ALTER TABLEqui les mettent d'accord.
C'est l'outil de la rétro-conception et de la documentation d'une base MySQL réelle. DBeaver, un client SQL gratuit, affiche aussi le diagramme des tables d'une base existante, dans l'onglet ER Diagram d'un schéma.
Les autres outils
| Outil | Type | Remarque |
|---|---|---|
| draw.io (diagrams.net) | Dessin généraliste, gratuit, en ligne ou installé | Aucune vérification ni génération : un dessin, pas un modèle |
| PowerAMC (SAP PowerDesigner) | Atelier de modélisation commercial | Utilisé dans les grandes entreprises et les administrations, notation Merise disponible |
| JMerise | Logiciel Java gratuit, plus ancien | Encore cité dans certains cours ; Looping et Mocodo l'ont remplacé dans la plupart des sections |
| Les ORM (Doctrine, Entity Framework, Prisma) | Bibliothèques de code | Le modèle est écrit dans le code ; ils génèrent les tables et, parfois, un diagramme |
La notation des pattes de corbeau
Workbench, DBeaver et la plupart des outils anglo-saxons dessinent les liens avec la notation des pattes de corbeau (crow's foot). Chaque extrémité d'un lien porte deux symboles : le cercle pour zéro, le trait pour un, la patte de corbeau (trois branches) pour plusieurs. Le symbole le plus proche de l'entité donne le maximum, l'autre le minimum.
| Symbole au bout du lien | Signifie |
|---|---|
deux traits ‖ | un et un seul (1,1) |
| un cercle et un trait | zéro ou un (0,1) |
| un cercle et une patte de corbeau | zéro ou plusieurs (0,n) |
| un trait et une patte de corbeau | un ou plusieurs (1,n) |
Attention au côté. Comme en UML, le symbole placé près d'une table dit combien de lignes de cette table sont liées à une ligne de l'autre. C'est l'inverse de Merise. Le lien entre site et exemplaire porte « un et un seul » du côté de site et « zéro ou plusieurs » du côté d'exemplaire, alors que le MCD écrit 0,n près de SITE et 1,1 près d'EXEMPLAIRE.
La rétro-conception : de la base au MCD
La rétro-conception (reverse engineering) consiste à reconstituer le modèle d'une base existante à partir de sa structure. Tu en as besoin quand tu reprends une application sans documentation (en stage, très souvent), quand tu dois faire évoluer une base que tu n'as pas conçue, ou quand un sujet d'examen te donne des tables et te demande de raisonner sur les règles de gestion qu'elles traduisent. Reprendre une application entière, code compris, suit la même logique : le chapitre Reprendre un code existant du cours Maintenance applicative en donne la méthode.
1. Récupère la structure. SHOW TABLES puis SHOW CREATE TABLE pour chaque table donnent les colonnes, les clés primaires, les clés étrangères, les NOT NULL et les UNIQUE. Pour la liste de toutes les clés étrangères d'une base, interroge le dictionnaire du serveur :
SELECT TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'parc'
AND REFERENCED_TABLE_NAME IS NOT NULL
ORDER BY TABLE_NAME;
Le Reverse Engineer de Workbench fait la même chose et dessine le résultat.
2. Classe les tables.
| Ce que tu observes | Ce que c'était dans le MCD |
|---|---|
| Une table dont la clé primaire est une seule colonne, qui n'est pas une clé étrangère | Une entité |
| Une table dont la clé primaire est composée de deux clés étrangères (et de rien d'autre) | Une association plusieurs à plusieurs ; ses autres colonnes sont des propriétés portées |
| Une table dont la clé primaire est composée de trois clés étrangères | Une association ternaire |
| Une table dont la clé primaire est composée de deux clés étrangères et d'une date (ou d'une saison) | Une association historisée (entité DATE, chapitre 7) |
| Une table dont la clé primaire contient une clé étrangère et une autre colonne | Une entité faible (identifiant relatif) |
| Une table dont la clé primaire est aussi une clé étrangère vers une autre table | Une entité spécialisée (héritage) |
3. Traduis chaque clé étrangère restante en association. Une clé étrangère x dans la table A vers la table B donne une association entre A et B, avec le maximum 1 du côté de A. Le minimum de ce côté se lit dans la structure : NOT NULL donne 1,1, une colonne qui accepte NULL donne 0,1. Si la clé étrangère est aussi UNIQUE, l'association est un à un.
4. Pose les cardinalités du côté n. La structure ne dit rien du minimum côté B : un service peut-il exister sans employé ? Seules les règles de gestion le disent. Interroge les utilisateurs, regarde les données (un service sans employé existe-t-il ?) et écris ton hypothèse. Par défaut, 0,n est le choix prudent.
5. Nomme les associations par un verbe, en t'aidant du nom de la clé étrangère (id_demandeur : DEMANDER ; id_technicien : REALISER), et vérifie que le MCD obtenu se relit en français.
Exemple : le MCD de la base parc
La base parc du cours SQL (schéma et script) compte sept tables. Appliquons la méthode.
Les entités. service, employe, poste, logiciel, ticket et intervention ont une clé primaire simple, qui n'est pas une clé étrangère : ce sont six entités. La table installation, de clé primaire (id_poste, id_logiciel), est une association plusieurs à plusieurs qui porte date_installation.
Les associations, une par clé étrangère restante :
| Clé étrangère | Obligatoire ? | Association obtenue |
|---|---|---|
employe.id_service | NOT NULL | EMPLOYE 1,1 ── APPARTENIR ── 0,n SERVICE |
employe.id_responsable | accepte NULL | EMPLOYE (encadré) 0,1 ── ENCADRER ── 0,n EMPLOYE (responsable) |
poste.id_employe | accepte NULL | POSTE 0,1 ── UTILISER ── 0,n EMPLOYE |
ticket.id_demandeur | NOT NULL | TICKET 1,1 ── DEMANDER ── 0,n EMPLOYE |
ticket.id_poste | accepte NULL | TICKET 0,1 ── CONCERNER ── 0,n POSTE |
intervention.id_ticket | NOT NULL | INTERVENTION 1,1 ── PORTER_SUR ── 0,n TICKET |
intervention.id_technicien | NOT NULL | INTERVENTION 1,1 ── REALISER ── 0,n EMPLOYE |
Et la table d'association : POSTE 0,n ── INSTALLER (date_installation) ── 0,n LOGICIEL.
Les minimums côté n sont des hypothèses, à confirmer avec les utilisateurs : un service qui vient d'être créé n'a encore aucun employé, un poste peut n'avoir jamais fait l'objet d'un ticket, un logiciel peut être au catalogue sans être installé. L'entité EMPLOYE est la plus reliée : quatre associations la relient à d'autres entités, avec quatre rôles différents (membre d'un service, utilisateur d'un poste, demandeur, technicien), plus la réflexive. C'est typique d'une entité « personne » dans un système de gestion.
Exercices
Exercice 1 sur 3 Retrouver le MCD d'une base de club Réussi À revoir
Voici la structure de la base d'un club de basket :
CREATE TABLE categorie (
code_cat VARCHAR(5) PRIMARY KEY,
libelle VARCHAR(30) NOT NULL
);
CREATE TABLE equipe (
num_equipe INT PRIMARY KEY,
nom_equipe VARCHAR(50) NOT NULL,
code_cat VARCHAR(5) NOT NULL,
FOREIGN KEY (code_cat) REFERENCES categorie (code_cat)
);
CREATE TABLE joueur (
num_licence CHAR(8) PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
num_equipe INT,
num_parrain CHAR(8),
FOREIGN KEY (num_equipe) REFERENCES equipe (num_equipe),
FOREIGN KEY (num_parrain) REFERENCES joueur (num_licence)
);
CREATE TABLE entraineur (
num_entraineur INT PRIMARY KEY,
nom VARCHAR(50) NOT NULL
);
CREATE TABLE encadrer (
num_entraineur INT NOT NULL,
num_equipe INT NOT NULL,
saison CHAR(9) NOT NULL,
PRIMARY KEY (num_entraineur, num_equipe),
FOREIGN KEY (num_entraineur) REFERENCES entraineur (num_entraineur),
FOREIGN KEY (num_equipe) REFERENCES equipe (num_equipe)
);
- Quelles tables sont des entités, lesquelles des associations ?
- Écris toutes les associations avec leurs cardinalités (fais une hypothèse pour les minimums côté n).
- Que penses-tu de la colonne
saisondansencadrer?
Voir la réponseMasquer la réponse de l'exercice 1
-
Entités : CATEGORIE, EQUIPE, JOUEUR, ENTRAINEUR (clé primaire simple, pas clé étrangère).
encadrerest une association plusieurs à plusieurs (clé primaire faite de deux clés étrangères), qui portesaison. -
Les associations :
EQUIPE 1,1 ── APPARTENIR ── 0,n CATEGORIE(code_catestNOT NULL) ;JOUEUR 0,1 ── JOUER_DANS ── 0,n EQUIPE(num_equipeaccepteNULL: un joueur sans équipe, en attente d'affectation) ;JOUEUR (filleul) 0,1 ── PARRAINER ── 0,n JOUEUR (parrain)(réflexive, facultative) ;ENTRAINEUR 0,n ── ENCADRER (saison) ── 0,n EQUIPE.
Les minimums côté n (0) sont des hypothèses : une catégorie peut exister sans équipe, une équipe sans joueur en début de saison.
-
La clé primaire (
num_entraineur,num_equipe) interdit à un entraîneur d'encadrer la même équipe deux saisons de suite : la saison devrait faire partie de la clé, ce qui revient à une association historisée (PRIMARY KEY (num_entraineur, num_equipe, saison)), comme au chapitre 7. C'est un défaut de conception, typique de ce que révèle une rétro-conception.
Tu avais trouvé ?
Exercice 2 sur 3 Lire NULL et UNIQUE Réussi À revoir
Pour chaque clé étrangère, donne l'association et ses cardinalités du côté de la table qui la contient.
vehicule.matricule_conducteur INT NULL UNIQUEverssalariefacture.num_commande INT NOT NULL UNIQUEverscommandecommande.num_client INT NOT NULLversclient
Voir la réponseMasquer la réponse de l'exercice 2
VEHICULE 0,1 ── CONDUIRE ── 0,1 SALARIE: facultative (0,1 côté véhicule) et unique (un salarié conduit au plus un véhicule, d'où 0,1 côté salarié). Association un à un.FACTURE 1,1 ── CORRESPONDRE ── 0,1 COMMANDE: chaque facture correspond à une commande (1,1), et une commande a au plus une facture (UNIQUE). Le minimum côté commande (0) est une hypothèse : une commande pas encore facturée.COMMANDE 1,1 ── PASSER ── 0,n CLIENT: obligatoire et non unique, donc un à plusieurs.
Tu avais trouvé ?
Exercice 3 sur 3 Écrire un MCD en Mocodo Réussi À revoir
Écris, dans la syntaxe de Mocodo, le MCD suivant : un client (numéro, nom, ville) passe des commandes (numéro, date) ; une commande est passée par un seul client ; une commande contient un ou plusieurs produits (référence, libellé, prix) dans une certaine quantité ; un produit figure dans zéro ou plusieurs commandes.
Voir la réponseMasquer la réponse de l'exercice 3
CLIENT: num_client, nom_client, ville_client
PASSER, 0N CLIENT, 11 COMMANDE
COMMANDE: num_cde, date_cde
CONTENIR, 1N COMMANDE, 0N PRODUIT: quantite
PRODUIT: ref_produit, libelle, prix_unitaire
Le minimum côté CLIENT (0N) suppose qu'on enregistre un client avant sa première commande. Mocodo génère ensuite le MLD : client, commande avec la clé étrangère num_client, produit, et une table contenir de clé primaire (num_cde, ref_produit).
Tu avais trouvé ?