Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

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 :

text
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 TABLE qui 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

OutilTypeRemarque
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 commercialUtilisé dans les grandes entreprises et les administrations, notation Merise disponible
JMeriseLogiciel Java gratuit, plus ancienEncore cité dans certains cours ; Looping et Mocodo l'ont remplacé dans la plupart des sections
Les ORM (Doctrine, Entity Framework, Prisma)Bibliothèques de codeLe 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 lienSignifie
deux traits ‖un et un seul (1,1)
un cercle et un traitzéro ou un (0,1)
un cercle et une patte de corbeauzéro ou plusieurs (0,n)
un trait et une patte de corbeauun 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 :

sql
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 observesCe que c'était dans le MCD
Une table dont la clé primaire est une seule colonne, qui n'est pas une clé étrangèreUne 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èresUne 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 colonneUne entité faible (identifiant relatif)
Une table dont la clé primaire est aussi une clé étrangère vers une autre tableUne 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èreObligatoire ?Association obtenue
employe.id_serviceNOT NULLEMPLOYE 1,1 ── APPARTENIR ── 0,n SERVICE
employe.id_responsableaccepte NULLEMPLOYE (encadré) 0,1 ── ENCADRER ── 0,n EMPLOYE (responsable)
poste.id_employeaccepte NULLPOSTE 0,1 ── UTILISER ── 0,n EMPLOYE
ticket.id_demandeurNOT NULLTICKET 1,1 ── DEMANDER ── 0,n EMPLOYE
ticket.id_posteaccepte NULLTICKET 0,1 ── CONCERNER ── 0,n POSTE
intervention.id_ticketNOT NULLINTERVENTION 1,1 ── PORTER_SUR ── 0,n TICKET
intervention.id_technicienNOT NULLINTERVENTION 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 :

sql
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)
);
  1. Quelles tables sont des entités, lesquelles des associations ?
  2. Écris toutes les associations avec leurs cardinalités (fais une hypothèse pour les minimums côté n).
  3. Que penses-tu de la colonne saison dans encadrer ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. Entités : CATEGORIE, EQUIPE, JOUEUR, ENTRAINEUR (clé primaire simple, pas clé étrangère). encadrer est une association plusieurs à plusieurs (clé primaire faite de deux clés étrangères), qui porte saison.

  2. Les associations :

    • EQUIPE 1,1 ── APPARTENIR ── 0,n CATEGORIE (code_cat est NOT NULL) ;
    • JOUEUR 0,1 ── JOUER_DANS ── 0,n EQUIPE (num_equipe accepte NULL : 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.

  3. 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.

  1. vehicule.matricule_conducteur INT NULL UNIQUE vers salarie
  2. facture.num_commande INT NOT NULL UNIQUE vers commande
  3. commande.num_client INT NOT NULL vers client
Voir la réponseMasquer la réponse de l'exercice 2
  1. 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.
  2. 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.
  3. 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
text
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é ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : MCD et diagramme de classes UML : les différencesRevoir le sommaire du cours