Diagramme de classes et MLD
Sommaire
Le diagramme de classes décrit la structure des données d'une application. Sa transposition en modèle logique donne le schéma de la base.
1. La classe
Une classe regroupe un nom, des attributs et des opérations. En conception de
données, on note l'attribut identifiant avec le stéréotype <<identifiant>>.
┌────────────────────────┐
│ Candidat │
├────────────────────────┤
│ <<identifiant>> num │
│ nom │
│ prenom │
│ dateNaissance │
└────────────────────────┘
2. Associations et cardinalités
Une association relie deux classes. Chaque extrémité porte une multiplicité qui indique combien d'objets de la classe opposée peuvent être liés.
| Notation | Signification |
|---|---|
1 | Exactement un |
0..1 | Zéro ou un |
1..* | Un ou plusieurs |
0..* ou * | Zéro ou plusieurs |
0..2 | Intervalle borné explicite |
Piège de lecture : en UML, la multiplicité se lit à l'extrémité opposée à la classe
dont on parle. « Un établissement accueille 0..* candidats » se note en plaçant 0..* du côté
Candidat. C'est l'inverse de la convention Merise, d'où les confusions fréquentes.
Une association peut elle-même porter des attributs : c'est la classe-association. Un candidat obtient une note à une épreuve — la note n'appartient ni au candidat ni à l'épreuve, mais au lien entre les deux.
3. Associations réflexives
Les associations réflexives (ou auto-associations) sont des associations binaires dont les deux pattes pointent vers la même classe. Toutes les règles habituelles s'appliquent.
┌──────────────────────────┐
│ Personne │ 0..2 « être parent de »
│ <<identifiant>> id │◄──────┐
│ nom │ │
│ prenom │ │
│ dateNaissance │───────┘
└──────────────────────────┘ 0..* « être enfant de »
Autres exemples : un employé encadre d'autres employés, un article en remplace un autre, une catégorie contient des sous-catégories.
4. Agrégats et compositions
| Agrégation | Composition | |
|---|---|---|
| Sens | Lien « ensemble / éléments » | Lien fort entre l'ensemble et ses composants |
| Symbole | Losange vide | Losange plein |
| Cycle de vie | Les éléments survivent à l'ensemble | La destruction de l'ensemble détruit obligatoirement ses composants |
| Exemple | Un lycée et ses enseignants : si le lycée ferme, les enseignants existent toujours | Un bâtiment, ses étages et ses salles : détruire le bâtiment détruit les étages |
En base de données, une composition se traduit souvent par un ON DELETE CASCADE sur la clé
étrangère : la sémantique du modèle se retrouve dans la contrainte d'intégrité.
5. Héritage
Le principe est de regrouper les attributs communs à plusieurs classes dans une classe mère. Les classes qui en héritent sont les classes enfants, et ajoutent leurs attributs spécifiques.
┌─────────────────────┐
│ Enseignant │
│ <<identifiant>> id │
│ nom / adresse │
└──────────△──────────┘
┌────────┴────────┐
┌───────────┴────────┐ ┌─────┴──────────────┐
│ Titulaire │ │ Contractuel │
│ dateTitularisation │ │ dateDebutContrat │
│ │ │ dateFinContrat │
└────────────────────┘ └────────────────────┘
6. Transposition en MLD
Règles de passage du diagramme de classes au modèle logique relationnel :
| Cas | Règle |
|---|---|
| Classe | Devient une table ; l'identifiant devient la clé primaire |
| Association 1 — 0..* / 1..* | La clé primaire du côté « 1 » migre comme clé étrangère du côté « plusieurs » |
| Association 0..* — 0..* | Création d'une table de liaison dont la clé primaire est la concaténation des deux clés étrangères |
| Classe-association | Devient la table de liaison, à laquelle on ajoute ses propres attributs |
| Association 1 — 0..1 | Clé étrangère du côté optionnel, ou fusion des deux tables |
| Réflexive 1 — 0..* | Clé étrangère vers la même table (ex. idResponsable) |
| Héritage | Trois stratégies : une table par classe, une table unique avec discriminant, ou tables filles portant la clé de la mère |
Exemple complet de MLD, avec conventions de notation (clé primaire soulignée, clé étrangère préfixée de #) :
EPREUVE (codeEpreuve, intituleEpreuve, coeffEpreuve)
codeEpreuve : clé primaire
ETABLISSEMENT (codeEtab, nomEtab, villeEtab)
codeEtab : clé primaire
CANDIDAT (numCandidat, nomCandidat, prenomCandidat, naissCandidat, #codeEtab)
numCandidat : clé primaire
codeEtab : clé étrangère en référence à codeEtab de ETABLISSEMENT
OBTENIR (#numCandidat, #codeEpreuve, note)
numCandidat, codeEpreuve : clé primaire
numCandidat : clé étrangère en référence à numCandidat de CANDIDAT
codeEpreuve : clé étrangère en référence à codeEpreuve de EPREUVE
OBTENIR est la traduction d'une classe-association entre CANDIDAT et EPREUVE : sa clé primaire est
composée des deux clés étrangères, et l'attribut note vient de l'association elle-même.