Partie 1 · Modéliser
Construire un MCD pas à pas : le forum
Le cours déroule un exemple complet : un forum de discussion. La méthode se retient comme une recette en six étapes.
- Identifier les entités : Forum, Rubrique, Site, Message, Auteur, Profil. (Pourquoi Site ? À une rubrique correspond un ensemble de sites ; un attribut ne peut pas contenir une liste, donc cette entité doit exister.)
- Lister les propriétés de chaque entité (ex. Message : titre, contenu, date_publication, est_initiateur).
- Identifier chaque entité de manière unique : un numéro, la clé primaire.
- Chercher les associations dans le discours du commanditaire (« être composé de »…). Ici 6 : Composé_de (Forum–Rubrique), Poster (Message–Rubrique), Documenter (Rubrique–Site), Réponse (réflexive sur Message), Écrire (Auteur–Message), Concerner (Auteur–Profil).
- Fixer les cardinalités.
- Normaliser (entités, noms, identifiants, attributs, associations, cardinalités).
Extrait du MCD (schéma partiel dessiné pour ce site, cardinalités du cours).
Choisir la relation la plus directe
Un message est posté dans une rubrique et une rubrique fait partie d'un forum : on ne crée pas d'association Message–Forum, elle se déduit de Composé_de et Poster. De même, pas d'association Profil–Message : elle se déduit de Concerner et Écrire. Ce serait de la redondance.
| Association | Cardinalités (cours) | Famille |
|---|---|---|
| Composé_de | un forum a plusieurs rubriques (au moins une) ; une rubrique n'est que dans un forum | CIF |
| Poster | une rubrique a 0 à plusieurs messages ; un message est dans une et une seule rubrique | CIF |
| Documenter | un site documente plusieurs rubriques (au moins une) ; une rubrique est documentée par plusieurs sites (m,n) | CIM |
| Réponse (réflexive) | un message répond à au plus un autre ; il peut en avoir plusieurs en réponse | CIF |
| Écrire | un auteur écrit 0 à plusieurs messages ; un message n'a qu'un auteur | CIF |
| Concerner | un auteur a un seul profil ; un profil mène à plusieurs auteurs | CIF |
Conséquence directe (exemple ajouté, déduit des règles CIF/CIM) : une seule association du forum devient une table, Documenter(#NumRubrique, #NumSite) ; les cinq autres deviennent des clés étrangères (par ex. Message(…, #NumRubrique, #NumAuteur, #NumMessageParent)).
Vérifie que tu as compris
Normalisation : l'exemple des attributs
est_initiateur(Message) ne sert à rien : on la supprime.date_premier_messageetdate_dernier_message(Auteur) peuvent se retrouver viadate_publicationdes messages, mais il faut évaluer le coût de calcul : la première n'est mise à jour qu'une fois (autant la stocker), la seconde change souvent (autant la recalculer au besoin, sauf si le besoin est très fréquent).- Le nom d'attribut
adresseest ambigu entre Site et Forum : ne rien faire (pour jointure), renommer, ou créer une association Forum–Site.
Vérifie que tu as compris
date_dernier_message (mise à jour très fréquente) ?