# 03 – Démarche et pièges
> [!info] Temps estimé : 45 min
> **Ce que vous saurez faire à la fin :** construire un MCD pas à pas à partir d'un texte, le vérifier avec une liste de règles, et repérer les erreurs les plus fréquentes, dans votre MCD comme dans celui d'un autre.
**Sommaire**
1. La démarche en 7 étapes
2. Exemple déroulé : le suivi d'un élevage
3. Les règles de vérification
4. Les pièges fréquents
5. Lire un MCD de façon critique
6. Glossaire
---
## 1. La démarche en 7 étapes
```mermaid
flowchart TD
A["1. Lire le texte<br/>et souligner les données"] --> B["2. Écrire les règles de gestion"]
B --> C["3. Dresser le dictionnaire<br/>brut puis épuré"]
C --> D["4. Repérer les entités<br/>et choisir leurs identifiants"]
D --> E["5. Relier par des associations<br/>et placer chaque propriété"]
E --> F["6. Écrire les cardinalités<br/>en citant les règles"]
F --> G["7. Vérifier<br/>(règles + pièges)"]
G -- "erreur ou doute" --> D
```
| Étape | Ce que vous faites | Astuce |
|---|---|---|
| 1. Lire | Soulignez les **noms** (candidats entités ou propriétés) et les **verbes** (candidats associations). | Lisez le texte **deux fois** avant de dessiner. |
| 2. Règles de gestion | Une phrase courte et numérotée par information ou contrainte. | Les mots « chaque », « un seul », « plusieurs », « au moins », « peut » annoncent des cardinalités. |
| 3. Dictionnaire | Listez toutes les données, puis supprimez synonymes et propriétés calculées, et précisez les polysèmes. | Ajoutez type et unité : cela révèle souvent des polysèmes. |
| 4. Entités | Regroupez les propriétés qui décrivent la même « chose ». Choisissez un identifiant pour chacune. | Test « si je connais l'identifiant… ». |
| 5. Associations | Reliez les entités par des verbes. Placez les propriétés restantes. | Une propriété qui dépend de plusieurs entités va sur l'association. |
| 6. Cardinalités | Deux questions par patte : *peut-elle exister sans ce lien ?* *peut-elle l'avoir plusieurs fois ?* | Notez le numéro de la règle qui justifie chaque cardinalité. |
| 7. Vérifier | Passez la liste de la section 3 et les pièges de la section 4. | Inventez quelques occurrences et « faites tourner » le modèle. |
Le MCD se construit rarement d'un seul coup : il est normal de revenir aux étapes 4 à 6 plusieurs fois.
---
## 2. Exemple déroulé : le suivi d'un élevage
> [!example] 🌾 Agrosciences – Le texte
> « Notre groupement suit les bovins de plusieurs exploitations. Chaque exploitation a un nom et se situe dans une commune ; une exploitation qui vient d'adhérer n'a pas encore d'animaux enregistrés. Chaque animal est connu par son numéro national (le numéro de boucle), son nom, sa date de naissance et son sexe ; nous calculons aussi son âge. Un animal est hébergé dans une seule exploitation. Il appartient à une race (nom de la race, orientation lait ou viande) ; nous avons enregistré toutes les races de la région, même celles que nous ne suivons pas encore. Les animaux sont pesés régulièrement et nous voulons garder l'historique des pesées. »
**Étape 2 – Règles de gestion**
| N° | Règle |
|---|---|
| RG1 | Une exploitation a un nom et une commune. |
| RG2 | Une exploitation héberge zéro, un ou plusieurs animaux. |
| RG3 | Un animal est hébergé dans une et une seule exploitation. |
| RG4 | Un animal a un numéro national (unique), un nom, une date de naissance et un sexe. |
| RG5 | Un animal appartient à une et une seule race ; une race peut n'avoir aucun animal suivi. |
| RG6 | Une race a un nom et une orientation (lait ou viande). |
| RG7 | Un animal peut être pesé plusieurs fois (ou pas encore) ; on conserve chaque pesée (date, poids en kg). |
**Étape 3 – Dictionnaire épuré** (extrait)
| Nom | Signification | Type | Unité | Remarque |
|---|---|---|---|---|
| `numNational` | Numéro national de l'animal | Texte | — | Synonyme « numéro de boucle » : un seul nom conservé |
| `dateNaissance` | Date de naissance de l'animal | Date | JJ/MM/AAAA | |
| `poidsKg` | Poids mesuré lors d'une pesée | Nombre décimal | kg | |
| `dateJour` | Jour d'une pesée | Date | JJ/MM/AAAA | |
| ~~âge~~ | — | — | — | **Supprimé** : propriété calculée à partir de `dateNaissance` |
**Étapes 4 et 5 – Entités et associations**
- Entités : EXPLOITATION, ANIMAL (identifiant naturel `numNational`), RACE, et DATE pour l'historique des pesées (RG7).
- Associations : Héberger (EXPLOITATION–ANIMAL), Appartenir (ANIMAL–RACE), Peser (ANIMAL–DATE), qui porte `poidsKg` : il faut connaître l'animal **et** la date pour connaître le poids.
**Étape 6 – Cardinalités**
| Patte | Cardinalité | Justification |
|---|---|---|
| EXPLOITATION – Héberger | 0,n | RG2 : une exploitation peut n'avoir aucun animal |
| ANIMAL – Héberger | 1,1 | RG3 |
| ANIMAL – Appartenir | 1,1 | RG5 |
| RACE – Appartenir | 0,n | RG5 : race enregistrée même sans animal |
| ANIMAL – Peser | 0,n | RG7 : pas encore pesé, ou plusieurs fois |
| DATE – Peser | 1,n | Une date n'existe que s'il y a eu au moins une pesée ce jour-là |
**Résultat**
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_exemple_elevage.svg|MCD du suivi d'élevage : EXPLOITATION 0,n Héberger 1,1 ANIMAL ; ANIMAL 1,1 Appartenir 0,n RACE ; ANIMAL 0,n Peser (poidsKg) 1,n DATE]]
**Étape 7 – Vérification** : chaque entité a un identifiant ; aucune propriété n'est calculée (l'âge a été retiré) ; Héberger et Appartenir ont une patte 1,1 et ne portent aucune propriété ; Peser porte `poidsKg`, qui dépend bien de l'animal et de la date.
---
## 3. Les règles de vérification
Passez cette liste sur **chaque** MCD, le vôtre comme celui d'un autre.
**Propriétés**
- [ ] Chaque propriété apparaît **une seule fois** dans tout le MCD, avec un nom précis.
- [ ] Aucune propriété **calculée** (sauf décision explicite et justifiée).
- [ ] Chaque propriété est **élémentaire** : une seule valeur à la fois.
- [ ] Chaque propriété dépend de **tout** l'identifiant de l'entité ou de l'association où elle est placée, et de **rien d'autre**.
**Entités**
- [ ] Chaque entité a un **nom au singulier** et un **identifiant** souligné.
- [ ] L'identifiant est vraiment **unique** pour chaque occurrence (sinon : identifiant artificiel ou relatif).
**Associations**
- [ ] Chaque association a un **verbe à l'infinitif** pour nom.
- [ ] **Toutes** les entités reliées sont nécessaires à chaque occurrence (surtout pour une ternaire).
- [ ] Une patte **x,1** (0,1 ou 1,1) n'apparaît que sur une association **binaire**, qui ne porte alors **aucune propriété**.
**Cardinalités**
- [ ] Chaque patte a une cardinalité, **justifiée par une règle de gestion**.
- [ ] Chaque identifiant relatif est marqué **1,1 (R)**.
---
## 4. Les pièges fréquents
### Piège 1 – La propriété calculée
**Symptôme** : une propriété s'obtient par un calcul à partir d'autres (`ageAnimal`, `energieTotaleRecette`, `epaisseurCouche` = profondeur de base − profondeur du toit).
**Correction** : la supprimer. On la recalculera à la demande.
### Piège 2 – La propriété à plusieurs valeurs
**Symptôme** : le nom est au pluriel ou commence par « liste » (`listeAllergenes`, `analyses`), ou la propriété peut recevoir plusieurs valeurs pour une même occurrence.
**Correction** : créer une **entité** pour ces valeurs et une **association**.
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_piege_multivaluee.svg|À éviter : INGREDIENT avec une propriété listeAllergenes. Correct : INGREDIENT 0,n Présenter 1,n ALLERGENE]]
Cas voisin, la **propriété décomposable** : une `adresse` contient en fait un numéro, une voie, un code postal et une ville. Si l'on a besoin de trier ou de filtrer par ville, il faut séparer ces informations.
### Piège 3 – La propriété mal placée dans une association
**Symptôme** : une propriété portée par une association ne dépend en réalité que **d'une** des entités.
**Test** : « Pour connaître cette valeur, ai-je besoin de **toutes** les entités reliées ? »
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_piege_mal_placee.svg|À éviter : energieKcal100g sur l'association Contenir. Correct : energieKcal100g dans INGREDIENT, quantiteG reste sur Contenir]]
L'énergie pour 100 g de semoule est la même dans toutes les recettes : elle appartient à INGREDIENT.
### Piège 4 – L'entité cachée dans une autre
**Symptôme** : dans une entité, un groupe de propriétés décrit **autre chose** que l'entité et se répète d'une occurrence à l'autre. Le test « si je connais… » révèle un intermédiaire : si je connais l'échantillon, je connais le laboratoire, et si je connais le laboratoire, je connais sa ville.
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_piege_entite_cachee.svg|À éviter : ECHANTILLON contenant codeLabo, nomLabo, villeLabo. Correct : ECHANTILLON 1,1 Analyser 0,n LABORATOIRE]]
**Correction** : sortir ces propriétés dans une nouvelle entité, reliée par une association.
### Piège 5 – L'entité « fourre-tout »
**Symptôme** : une entité regroupe des objets de natures différentes, et beaucoup de ses propriétés restent vides selon les occurrences. Exemple : une entité PERSONNE qui mélange exploitants (avec `numPacage`), techniciens (avec `secteur`) et clients (avec `adresseLivraison`).
**Correction** : se demander si ce sont vraiment **les mêmes objets décrits par les mêmes propriétés**. Sinon, créer des entités distinctes.
### Piège 6 – Confondre entité et propriété
**Symptôme** : une information simple est transformée en entité sans raison, ou au contraire une « chose » importante est réduite à une propriété.
**Repère** : une information devient une **entité** si elle a **ses propres propriétés** (une race a un nom **et** une orientation) ou si elle doit être **reliée** à plusieurs autres entités. Sinon, c'est une **propriété** (le `sexe` d'un animal n'a pas besoin d'être une entité).
### Piège 7 – L'association redondante
**Symptôme** : une association donne une information que l'on peut **déjà retrouver** en suivant d'autres associations.
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_piege_redondance.svg|RECETTE 1,n Contenir 0,n INGREDIENT 0,n Présenter 1,n ALLERGENE ; une association Comporter, en pointillés rouges, relie directement RECETTE et ALLERGENE]]
Les allergènes d'une recette se déduisent de ses ingrédients (Contenir puis Présenter) : Comporter est **redondante** et doit être supprimée, sinon les deux chemins finiront par se contredire.
> [!warning] Vérifiez avant de supprimer
> Une association n'est redondante que si elle n'apporte **aucune information nouvelle**. Si le métier veut enregistrer les **traces** d'allergènes dues à l'atelier de fabrication (et non aux ingrédients), Comporter apporte une information que l'autre chemin ne donne pas : elle est alors **justifiée**, et il faut la renommer pour que son sens soit clair (par exemple *Contenir des traces*).
### Piège 8 – La ternaire qui cache une dépendance
**Symptôme** : dans une association ternaire, connaître **une** des entités suffit à connaître **une autre**.
> [!example] 🌾 Agrosciences
> On enregistre qui sème quelle variété sur quelle parcelle. Mais une parcelle est toujours exploitée par **un seul** exploitant : si je connais la parcelle, je connais l'exploitant. L'exploitant n'est donc pas nécessaire dans Semer.
![[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/ressources/mcd_piege_ternaire.svg|À éviter : ternaire Semer entre PARCELLE, VARIETE et EXPLOITANT. Correct : EXPLOITANT 0,n Exploiter 1,1 PARCELLE, puis PARCELLE 0,n Semer 0,n VARIETE]]
**Correction** : sortir la dépendance dans une association binaire avec une patte 1,1 (Exploiter), et garder Semer entre les deux entités réellement nécessaires.
> [!abstract]- Pour aller plus loin
> Ce type de dépendance porte le nom de **contrainte d'intégrité fonctionnelle (CIF)** : une entité est entièrement déterminée par la connaissance d'une ou plusieurs autres entités de l'association. Voir [[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/04_au_dela_de_la_competence|Au-delà de la compétence]].
### Piège 9 – L'identifiant relatif oublié… ou abusif
**Oublié** : on identifie l'échantillon par `numEchantillon` seul, alors que chaque forage recommence la numérotation à 1. Il existe alors plusieurs « échantillon n° 1 » impossibles à distinguer. → Identifiant relatif **1,1 (R)** vers FORAGE.
**Abusif** : on rend PARCELLE relative à EXPLOITANT. Mais une parcelle existe indépendamment de son exploitant et peut en changer : son identifiant changerait avec lui ! → Identifiant **propre** (`idParcelle`).
> [!abstract]- Pour aller plus loin
> Les pièges 2, 3 et 4 correspondent aux trois premières **formes normales**, des règles de qualité utilisées par les informaticiens :
> - **1re forme normale** : chaque propriété est atomique (une seule valeur) → piège 2 ;
> - **2e forme normale** : chaque propriété dépend de **tout** l'identifiant → piège 3 ;
> - **3e forme normale** : chaque propriété dépend **directement** de l'identifiant, sans intermédiaire → piège 4.
---
## 5. Lire un MCD de façon critique
Pour relire un MCD (le vôtre ou celui d'un autre) :
1. **Lisez chaque patte à voix haute** avec la phrase type : « Un(e) … [verbe] au minimum … et au maximum … ». Chaque phrase doit être **vraie** dans l'activité étudiée.
2. **Retrouvez la règle de gestion** qui justifie chaque cardinalité. Une cardinalité sans règle est une hypothèse à vérifier auprès du métier.
3. **Inventez trois ou quatre occurrences** réalistes et vérifiez qu'elles s'enregistrent sans conflit d'identifiant ni perte d'information, en particulier pour les actions qui se répètent.
4. **Passez la liste de la section 3** puis les **pièges** de la section 4.
5. **Cherchez ce qui manque** : chaque demande du texte (« nous voulons lister… », « nous voulons savoir… ») doit pouvoir être satisfaite en suivant les entités et les associations.
> [!summary] À retenir
> - Démarche : **texte → règles de gestion → dictionnaire épuré → entités et identifiants → associations → cardinalités → vérification**, avec des allers-retours.
> - Chaque cardinalité est **justifiée par une règle de gestion**.
> - Avant de rendre un MCD : **liste de vérification + 9 pièges + occurrences inventées**.
⬅️ Précédent : [[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/02_notions_MCD|02 – Les notions du MCD]] · ➡️ Facultatif : [[Code et Développement/Développement d'Applications/Modèle conceptuel de Données/04_au_dela_de_la_competence|04 – Au-delà de la compétence]]
---
## 6. Glossaire
| Terme | Définition |
|---|---|
| **Association** | Lien entre des entités, nommé par un verbe à l'infinitif et représenté par une ellipse. |
| **Association réflexive** | Association qui relie une entité à elle-même ; chaque patte porte un rôle. |
| **Association ternaire** | Association qui relie trois entités. |
| **Attribut** | Synonyme de propriété. |
| **camelCase** | Convention d'écriture des noms : premier mot en minuscules, majuscule au début de chaque mot suivant (`dateForage`). |
| **Cardinalité** | Couple min,max écrit côté entité : nombre minimal et maximal de participations d'une occurrence de l'entité à l'association. |
| **Dictionnaire de données** | Liste de toutes les données élémentaires utiles, avec signification, type et unité ; *brut* avant épuration, *épuré* après. |
| **Dimension** | Nombre d'entités reliées par une association. |
| **Entité** | Ensemble d'objets de même nature décrits par les mêmes propriétés ; représentée par un rectangle. |
| **Formalisme** | Ensemble de règles de représentation communes (ici : Entité-Association). |
| **Historique** | Conservation de toutes les occurrences d'une action qui se répète. |
| **Identifiant** | Propriété (ou groupe de propriétés) dont la valeur est différente pour chaque occurrence de l'entité. |
| **Identifiant artificiel** | Numéro créé uniquement pour identifier (`idParcelle`). |
| **Identifiant naturel** | Donnée de l'activité déjà unique (`numNational`). |
| **Identifiant relatif** | Identifiant formé du numéro propre de l'entité et de l'identifiant de l'entité dont elle dépend ; patte 1,1 (R). |
| **MCD** | Modèle Conceptuel de Données : schéma des données utiles et de leurs liens, indépendant de tout logiciel. |
| **MERISE** | Méthode française de conception des systèmes d'information, dont fait partie le MCD. |
| **Occurrence** | Valeur concrète d'une propriété, ou objet particulier d'une entité ou d'une association. |
| **Patte** | Trait qui relie une association à une entité ; elle porte la cardinalité. |
| **Polysème** | Mot unique qui désigne plusieurs informations différentes. |
| **Propriété** | Information élémentaire utile à l'activité. |
| **Propriété calculée** | Propriété qui s'obtient par calcul à partir d'autres ; on ne la conserve pas. |
| **Redondance** | Même information enregistrée à plusieurs endroits. |
| **Règle de gestion** | Phrase courte et numérotée décrivant une donnée ou une contrainte de l'activité. |
| **Rôle** | Nom donné à une patte, surtout dans une association réflexive (remplacé / substitut). |
| **Synonymes** | Plusieurs noms pour une même information. |