diff --git a/app/data/docs/merise/dictionnaire-de-donnees/page.md b/app/data/docs/merise/dictionnaire-de-donnees/page.md index b7a24fd..74a4cc1 100644 --- a/app/data/docs/merise/dictionnaire-de-donnees/page.md +++ b/app/data/docs/merise/dictionnaire-de-donnees/page.md @@ -14,13 +14,18 @@ Pour cet article et les suivants, on va se reposer sur une mise en situation fic ## Brief avec le client -Le client est un petit groupe local qui doit faciliter l'organisation interne pour la gestion de ses différentes activités (répétitions, concerts, etc.). +Le client est un groupe qui doit faciliter l'organisation interne pour la gestion de ses différentes activités (répétitions, concerts, etc.). Il souhaite donc créer une application pour gérer les informations suivantes : -- **Membre** : Nom, prénom, instruments, adresse e-mail, mot de passe +- **Musicien** : Nom, prénom, instruments, adresse e-mail, mot de passe - **Concert** : Date et heure, lieu, tarif - **Répétition** : Date et heure, lieu +Le client a aussi précisé que le mot de passe doit faire plus de 12 caractères, et que l'adresse e-mail doit être unique. + +En ce qui concerne les répétitions et les concerts, il nous a indiqué que tous les musiciens ne sont pas forcément présents à chaque répétition ou concert. +Il faut donc prévoir un moyen pour savoir qui est présent à chaque répétition et concert. + Pour le moment, on ne va pas se soucier de la technique, mais juste de lister les données que l'on doit stocker dans la base de données. On va donc créer un tableau qui va nous permettre de lister toutes les données que l'on doit stocker dans notre base de données. @@ -67,11 +72,11 @@ Voici donc le dictionnaire de données que l'on va créer pour notre application | Nom de la donnée | Format | Longueur | Contraintes | Document | | --------------------------- | -------------- | -------- | ------------------- | ---------- | -| Nom | Alphabétique | 30 | Obligatoire | Membre | -| Prénom | Alphabétique | 30 | Obligatoire | Membre | -| Instruments | Alphabétique | 30 | Obligatoire | Membre | -| Adresse e-mail | Alphanumérique | 50 | Obligatoire, unique | Membre | -| Mot de passe | Alphanumérique | > 12 | Obligatoire | Membre | +| Nom | Alphabétique | 30 | Obligatoire | Musicien | +| Prénom | Alphabétique | 30 | Obligatoire | Musicien | +| Instruments | Alphabétique | 30 | Obligatoire | Musicien | +| Adresse e-mail | Alphanumérique | 50 | Obligatoire, unique | Musicien | +| Mot de passe | Alphanumérique | > 12 | Obligatoire | Musicien | | Date et heure de concert | Date | - | Obligatoire | Concert | | Lieu de concert | Alphabétique | 50 | Obligatoire | Concert | | Tarif | Numérique | - | - | Concert | diff --git a/app/data/docs/merise/mcd/page.md b/app/data/docs/merise/mcd/page.md index e992b5b..1869ce7 100644 --- a/app/data/docs/merise/mcd/page.md +++ b/app/data/docs/merise/mcd/page.md @@ -119,13 +119,89 @@ Pour rappel, voici notre dictionnaire de données : | Nom de la donnée | Format | Longueur | Contraintes | Document | | --------------------------- | -------------- | -------- | ------------------- | ---------- | -| Nom | Alphabétique | 30 | Obligatoire | Membre | -| Prénom | Alphabétique | 30 | Obligatoire | Membre | -| Instruments | Alphabétique | 30 | Obligatoire | Membre | -| Adresse e-mail | Alphanumérique | 50 | Obligatoire, unique | Membre | -| Mot de passe | Alphanumérique | > 12 | Obligatoire | Membre | +| Nom | Alphabétique | 30 | Obligatoire | Musicien | +| Prénom | Alphabétique | 30 | Obligatoire | Musicien | +| Instruments | Alphabétique | 30 | Obligatoire | Musicien | +| Adresse e-mail | Alphanumérique | 50 | Obligatoire, unique | Musicien | +| Mot de passe | Alphanumérique | > 12 | Obligatoire | Musicien | | Date et heure de concert | Date | - | Obligatoire | Concert | | Lieu de concert | Alphabétique | 50 | Obligatoire | Concert | | Tarif | Numérique | - | - | Concert | | Date et heure de répétition | Date | - | Obligatoire | Répétition | | Lieu de répétition | Alphabétique | 50 | Obligatoire | Répétition | + +### Les entités + +On va donc créer trois entités : + +- **Musicien** +- **Concert** +- **Répétition** + +Ces entités vont contenir les attributs que l'on a récupérés dans le dictionnaire de données. + +On se retrouve pour le moment avec un MCD qui ressemble à ça : +![MCD avec uniquement les entités](/merise/mcd-1.webp) + +On est déjà pas trop mal, il nous reste plus qu'à ajouter les relations entre les entités et les cardinalités ! + +### Les relations + +On va donc ajouter les relations entre les entités. + +Sachant qu'un musicien peut participer à plusieurs concerts, et qu'un concert peut avoir plusieurs musiciens, on va créer une relation entre les deux entités. +On va donc créer une relation **"Participer"** entre les entités **Musicien** et **Concert**. + +On en fera une relation **0,N** - **1,N**. + +Pour la répétition, on va faire la même chose ! +On va créer une relation **"Répéter"** entre les entités **Musicien** et **Répétition**. + +À la fin, on se retrouve avec un MCD qui ressemble à ça : +![MCD avec les relations](/merise/mcd-2.webp) + +Et c'est tout ! Notre MCD est terminé... enfin presque ! + +### Aller plus loin + +Si on souhaite aller plus loin, on peut ajouter de l'héritage. + +{% callout type="note" title="Rapide point sur l'héritage" %} +L'héritage _(ou aussi appelé **spécialisation** ou **généralisation**)_ est un concept qui va nous permettre de factoriser les propriétés identiques dans une entité commune. Cette entitée est appelée **entité générique** _(ou **sur-type**)_. + +Les entités qui héritent de l'entité générique sont appelées **entités spécialisées** _(ou **sous-types**)_. +{% /callout %} + +En regardant bien notre MCD, on se rend compte que les entités **Concert** et **Répétition** ont des attributs communs : + +- Date et heure +- Lieu + +La seule différence est que le concert a un tarif, contrairement à la répétition. +On va donc pouvoir créer une entité **générique** que l'on appelera **Événement**. + +Cette entité générique va contenir les attributs communs aux deux entités, et on va faire hériter les entités **Concert** et **Répétition** de cette entité. +On se retrouve donc avec ces trois entités _(**Événement**, **Concert** et **Répétition**)_ : +![MCD avec héritage](/merise/mcd-3.webp) + +{% callout type="question" title="Pourquoi ne pas stocker le type d'événement ?" %} +Effectivement, on aurait pu stocker le type d'événement dans l'entité **Événement** ! +Il s'agit d'une autre approche qui est tout à fait valable. + +Cependant, il est plus simple de créer une entité générique qui va nous permettre de factoriser les attributs communs et éviter de devoir rendre plusieurs attributs nullables en fonction du type d'événement. + +On renforce ainsi l'intégrité de la base de données. +{% /callout %} + +Le MCD final ressemble donc à ça : +![MCD final](/merise/mcd-4.webp) + +Si tu souhaites télécharger le MCD que l'on vient de créer, tu peux le faire ici : [MCD Merise pour Looping](/downloads/merise/band-manager.loo). + +## Conclusion + +En conclusion, le MCD dans Merise est un outil indispensable pour structurer et visualiser les données de manière claire et cohérente. + +Grâce à des entités, des attributs, des relations et des cardinalités, le MCD permet de représenter les informations de façon abstraite, tout en restant compréhensible pour le client. + +Prochaine étape : le **MLD** _(Modèle Logique de Données)_ et le **MRD** _(Modèle Relationnel de Données)_ ! diff --git a/app/public/downloads/merise/band-manager.lo1 b/app/public/downloads/merise/band-manager.lo1 new file mode 100644 index 0000000..9b033b5 Binary files /dev/null and b/app/public/downloads/merise/band-manager.lo1 differ diff --git a/app/public/downloads/merise/band-manager.loo b/app/public/downloads/merise/band-manager.loo new file mode 100644 index 0000000..9b033b5 Binary files /dev/null and b/app/public/downloads/merise/band-manager.loo differ diff --git a/app/public/merise/mcd-1.webp b/app/public/merise/mcd-1.webp index a19b3fe..18bbba3 100644 Binary files a/app/public/merise/mcd-1.webp and b/app/public/merise/mcd-1.webp differ diff --git a/app/public/merise/mcd-2.webp b/app/public/merise/mcd-2.webp new file mode 100644 index 0000000..8a3ab9b Binary files /dev/null and b/app/public/merise/mcd-2.webp differ diff --git a/app/public/merise/mcd-3.webp b/app/public/merise/mcd-3.webp new file mode 100644 index 0000000..53e8aba Binary files /dev/null and b/app/public/merise/mcd-3.webp differ diff --git a/app/public/merise/mcd-4.webp b/app/public/merise/mcd-4.webp new file mode 100644 index 0000000..3bc92cf Binary files /dev/null and b/app/public/merise/mcd-4.webp differ