diff --git a/app/data/docs/merise/dictionnaire-de-donnees/page.md b/app/data/docs/merise/dictionnaire-de-donnees/page.md index c729413..b7a24fd 100644 --- a/app/data/docs/merise/dictionnaire-de-donnees/page.md +++ b/app/data/docs/merise/dictionnaire-de-donnees/page.md @@ -1,6 +1,6 @@ --- -title: Dictionnaire de données pour Merise -description: Apprends à créer un dictionnaire de données pour Merise +title: Dictionnaire de Données Merise +description: Explorez le dictionnaire de données dans Merise, essentiel pour structurer et documenter les informations de votre système. tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] --- @@ -65,18 +65,18 @@ Tu risques de retrouver ton client en train de convulser sur le sol : **pas glop 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(s) | -| --------------------------- | -------------- | -------- | ------------------- | ----------- | -| 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 | -| 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 | +| 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 | +| 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 | Voilà, on a notre dictionnaire de données ! diff --git a/app/data/docs/merise/mcd/page.md b/app/data/docs/merise/mcd/page.md new file mode 100644 index 0000000..e992b5b --- /dev/null +++ b/app/data/docs/merise/mcd/page.md @@ -0,0 +1,131 @@ +--- +title: Modèle Conceptuel de Données (MCD) Merise +description: Comprenez le MCD dans Merise, une étape clé pour représenter les données de manière abstraite et cohérente. +tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] +--- + +On va enfin pouvoir commencer à réaliser notre premier schéma : le **MCD** _(Modèle Conceptuel de Données)_ ! + +Mais déjà... qu'est-ce que c'est que ce MCD ? + +## Qu'est-ce que le MCD ? + +Le **MCD** est un schéma qui va nous permettre de représenter les données que l'on a récupérées dans le dictionnaire de données. + +Il va nous permettre de représenter les différentes données que l'on a, regroupée dans un rectangle nommé **entité**, ainsi que les relations entre elles. +On devra également indiquer les **cardinalités** de chaque relation entre les **entités**. + +Tout comme le dictionnaire de données, ce schéma doit rester compréhensible par le client. +Il doit donc être le plus simple possible, et ne pas contenir de détails techniques. + +Pour ce schéma _(ainsi que les suivants)_, on va utiliser le logiciel **Looping**. + +## Définitions + +Tu l'auras remarqué, ici on ne parle pas de "table" ou de "colonne". +On va exploiter d'autres termes comme **entité**, **attribut** ou **relation**. + +Voici un petit lexique pour t'aider à comprendre : + +| Terme | Définition | +| ------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| **Entité** | Représentation d'un regroupement de données _(rectangle)_ | +| **Attribut** | Donnée précise d'une entité | +| **Relation** | Lien entre deux entités _(bulle ovale/arrondie)_, accompagné d'un verbe à l'infinitif | +| **Cardinalité** | Nombre d'occurrences _(minimum et maximum)_ d'une entité par rapport à une autre | +| **Discriminant** _(ou **déterminant**/**identifiant**)_ | Attribut qui permet d'identifier une entité de manière unique _(ex: matricule)_ | + +C'est tout un lexique à apprendre, mais pas de panique tu vas vite t'y habituer ! + +## Exemple de MCD + +Forcément, les définitions sans donner un exemple ça n'aide pas beaucoup à comprendre... +Voici un petit exemple tout simple de MCD pour illustrer tout ça : + +![Exemple de MCD](/merise/mcd-basic.webp) + +On a ici un MCD qui représente trois **entités** : + +- **Entité 1** +- **Entité 2** +- **Entité 3** + +Chacune de ces entités a plusieurs **attributs** qui lui sont propres : + +- **Entité 1** : code identité 1, attribut 2, attribut 3 +- **Entité 2** : code identité 2, attribut 2, attribut 3 +- **Entité 3** : code identité 3, attribut 2, attribut 3 + +{% callout type="question" title="Pourquoi le premier attribut est en gras et souligné ?" %} +Dans le MCD, un attribut en gras est un attribut **unique**. +S'il est souligné en plus d'être en gras, c'est qu'il s'agit d'un **discriminant** _(ou déterminant/identifiant)_. + +Il permet d'identifier de manière unique une entité. +Comme le MCD n'est **pas technique**, on n'utilisera pas le terme de **clé primaire** ou **ID**. +{% /callout %} + +Et pour terminer, on remarque aussi que certaines de nos entités sont reliées entre elles par des **relations**. +Les relations se caractèrisent par : + +- Une bulle ovale ou arrondie contenant un verbe à l'infinitif _(par exemple : "posséder")_ +- Des **cardinalités** qui vont indiquer le nombre d'occurrences d'une entité par rapport à une autre. + +Ici, on a : + +- **Entité 1** 0,N - Contenir - 0,N **Entité 2** +- **Entité 1** 1,1 - Posséder - 0,N **Entité 3** + +Mais qu'est-ce que ça veut dire tout ça ? + +## Les cardinalités + +Les cardinalités sont un élément essentiel du MCD. +Elles vont nous permettre de définir le nombre d'occurrences d'une entité par rapport à une autre. + +Une cardinalité est définie par deux valeurs : + +1. Le **minimum** d'occurrences +2. Le **maximum** d'occurrences + +On va donc avoir des cardinalités de la forme : **X,Y**. + +Toujours dans l'exemple précédent, on comprend donc que : + +- **Entité 1** peut contenir entre 0 et N **Entité 2** +- **Entité 2** peut être contenue entre 0 et N **Entité 1** +- **Entité 1** doit posséder 1 et 1 seule **Entité 3** +- **Entité 3** peut être possédée entre 0 et N **Entité 1** + +{% callout type="note" title="Les différentes valeurs" %} +La plupart du temps, nous allons retrouver les valeurs suivantes : + +- **0** +- **1** +- **N** + +**N** signifie "N'importe quel nombre" _(0, 1, 2, 3, ...)_. +Mais dès que l'on connait le nombre exact, on peut le mettre à la place de **N**. + +Par exemple : **1,5** signifie "1 à 5" et **0,3** signifie "0 à 3". + +Si la valeur n'est pas connue à l'avance ou qu'aucune limite n'est nécessaire, on utilisera alors **N**. +{% /callout %} + +## Retour sur notre dictionnaire de données + +Maintenant que l'on sait comment fonctionne un MCD, on va pouvoir retourner sur notre dictionnaire de données pour le formaliser en MCD. + +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 | +| 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 | diff --git a/app/data/docs/merise/mld/page.md b/app/data/docs/merise/mld/page.md new file mode 100644 index 0000000..14482d9 --- /dev/null +++ b/app/data/docs/merise/mld/page.md @@ -0,0 +1,5 @@ +--- +title: Modèle Logique/Relationnel de Données (MLD/MRD) Merise +description: Plongez dans le MLD et MRD de Merise pour transformer votre modèle conceptuel en une structure relationnelle optimisée. +tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] +--- diff --git a/app/data/docs/merise/modele-conceptuel-de-donnees/page.md b/app/data/docs/merise/modele-conceptuel-de-donnees/page.md deleted file mode 100644 index 7e78acc..0000000 --- a/app/data/docs/merise/modele-conceptuel-de-donnees/page.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: Introduction à Merise -description: Parlons un peu de Merise, la fameuse méthodologie de modélisation pour la conception de bases de données. -tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] ---- - -On va enfin pouvoir commencer à réaliser notre premier schéma : le **MCD** _(Modèle Conceptuel de Données)_ ! - -Mais déjà... qu'est-ce que c'est que ce MCD ? - -## Qu'est-ce que le MCD ? - -Le **MCD** est un schéma qui va nous permettre de représenter les données que l'on a récupérées dans le dictionnaire de données. - -Il va nous permettre de représenter les différentes données que l'on a, regroupée dans un rectangle nommé **entité**, ainsi que les relations entre elles. -On devra également indiquer les **cardinalités** de chaque relation entre les **entités**. - -Tout comme le dictionnaire de données, ce schéma doit rester compréhensible par le client. -Il doit donc être le plus simple possible, et ne pas contenir de détails techniques. - -Pour ce schéma _(ainsi que les suivants)_, on va utiliser le logiciel **Looping**. - -## Définitions - -Tu l'auras remarqué, ici on ne parle pas de "table" ou de "colonne". -On va exploiter d'autres termes comme **entité**, **attribut** ou **relation**. - -Voici un petit lexique pour t'aider à comprendre : - -| Terme | Définition | -| --------------------------------------- | ------------------------------------------------------------------------------------- | -| **Entité** | Représentation d'un regroupement de données _(rectangle)_ | -| **Attribut** | Donnée précise d'une entité | -| **Relation** | Lien entre deux entités _(bulle ovale/arrondie)_, accompagné d'un verbe à l'infinitif | -| **Cardinalité** | Nombre d'occurrences _(minimum et maximum)_ d'une entité par rapport à une autre | -| **Discriminant** _(ou **déterminant**)_ | Attribut qui permet d'identifier une entité de manière unique _(ex: matricule)_ | - -C'est tout un lexique à apprendre, mais pas de panique tu vas vite t'y habituer ! - -## Premières entités - -Commençons par créer notre MCD avec les données que l'on a récupérées dans le dictionnaire de données ! -En reprenant notre tableau précédent, on constate que l'on a : - -- **Pomme de terre** -- **Salarié** -- **Vente** - -Dans un premier temps, concentrons-nous sur les deux premières entités : **Pomme de terre** et **Salarié**. - -On va donc créer deux rectangles, un pour chaque entité. -Dans chacune d'elles, on va ajouter les attributs que l'on a récupérés dans le dictionnaire de données. - -On se retrouve donc avec un schéma similaire à celui-ci : - -![MCD - Entités (étape 1)](/merise/mcd-1.webp) - -On a donc deux entités : **Pomme de terre** et **Salarié**. -Chacune d'elles contient les attributs que l'on a récupérés dans le dictionnaire de données. - -Avant d'aller plus loin, on va analyser ce qu'on a fait. - -### Entité "Pomme de terre" - -L'entité **Pomme de terre** contient les attributs suivants : - -- **Variété** : Nom de la variété de la pomme de terre -- **Stock** : Quantité de pommes de terre en stock - -### Entité "Salarié" - -L'entité **Salarié** contient les attributs suivants : - -- **Matricule** : Numéro d'immatriculation du salarié -- **Nom** : Nom du salarié -- **Prénom** : Prénom du salarié - -## Spécificité des attributs d'entité - -C'est un bon début, mais il nous manque des choses ! -Il est essentiel de pouvoir identifier une ressource de manière unique. - -Côté base de données on parle souvent de **clé primaire** _(ou **primary key**)_, mais souvenons-nous que notre document doit rester compréhensible par le client. -On parlera donc de **discriminant** _(ou **déterminant**)_. - -Si on regarde notre entité **Pomme de terre**, on peut se rendre compte que l'on n'a pas d'attribut qui permet d'identifier une pomme de terre de manière unique. -On va donc ajouter un nouvel attribut : **Code pomme de terre**. - -Ce terme se veut simple et compréhensible par le client, mais il est important de lui expliquer que ce code est unique pour chaque pomme de terre. -On va donc ajouter cet attribut à notre entité **Pomme de terre**. - -Pour l'entité **Salarié**, on a déjà un attribut qui permet d'identifier un salarié de manière unique : **Matricule**. -On va donc le garder tel quel, en le considérant comme un **discriminant**. - -On va donc mettre à jour notre MCD avec les nouveaux attributs : - -![MCD - Entités (étape 2)](/merise/mcd-2.webp) - -Et déjà, c'est beaucoup mieux ! - -{% callout type="warning" title="Discriminant et ID" %} - -Tu l'auras remarqué, je n'ai pas utilisé le terme `ID` pour désigner le **discriminant**. -La raison est simple : le terme `ID` est souvent utilisé pour désigner un identifiant **technique**. - -Il ne s'agit pas d'une donnée réelle à proprement parler, mais d'un identifiant qui va nous permettre de retrouver une donnée dans la base de données. - -Le client n'ayant pas besoin de savoir ce qu'est un identifiant technique, on va préférer utiliser le terme **discriminant** ou **déterminant**. - -{% /callout %} - -## Données uniques et discriminants - -Je fais un rapide point entre les données uniques et discriminants ! -Les deux attributs sont **uniques**, mais n'ont pas la même signification. - -Dans l'exemple donné plus tôt avec l'attribut **Matricule**, il s'agit d'un **discriminant naturel**. Dans ce cas précis, il s'agit d'une **donnée réelle** _(métier)_ qui permet d'identifier un salarié de manière unique. - -Maintenant, prenons l'exemple d'un compte utilisateur sur un site web avec : - -- **Email** : Adresse email de l'utilisateur -- **Mot de passe** : Mot de passe de l'utilisateur - -On serait tenté de se dire que l'adresse email est un discriminant du fait que cette donnée se doit d'être unique. -Pourtant, ce n'est pas le cas. - -La raison est simple : l'adresse email peut être **modifiée par l'utilisateur**. - -Un discriminant se veut **unique**, **fixe** et **non modifiable**. -En gros, les mêmes contraintes que pour une **clé primaire** _(même si on ne doit pas utiliser ce terme dans un MCD)_. - -Maintenant, à quoi ça ressemble dans un MCD ? - -### Représentation graphique entre discriminant et unique - -Une donnée unique se représente par une écriture **épaisse** sur le nom de l'attribut d'une entité. -On sait qu'il s'agit d'une donnée unique, mais pas forcément d'un discriminant. - -Le discriminant reprend cette même écriture, mais ajoute un **soulignement** sur le nom de l'attribut. - -![MCD - Discriminant et unique](/merise/mcd-3.webp) - -## Relations entre entités - -Oui, on passe déjà aux relations entre entités ! -Et si jamais tu te poses la question : "Et **Vente** alors ?"... et bien on en parle juste maintenant ! - -Dans notre situation, une vente relie les entités **Pomme de terre** et **Salarié**. -On va donc créer une nouvelle entité : **Vente**. - -Dans notre cas, on sait qu'une vente est réalisée par un salarié et concerne une ou plusieurs pommes de terre. -C'est donc maintenant que l'on peut parler de **cardinalité** ! - -### Écriture et lecture des cardinalités - -La cardinalité est un élément essentiel dans la modélisation de données. Elle permet de définir le nombre d'occurrences d'une entité par rapport à une autre. - -Une cardinalité se compose de deux valeurs : - -- **Minimum** : Nombre minimum d'occurrences _(0, 1, ...)_ -- **Maximum** : Nombre maximum d'occurrences _(1, 2, N, ...)_ - -{% callout type="question" title="C'est quoi ce `N` ?" %} - -`N` représente une valeur **illimitée**. - -Dans le cas d'une vente, on ne limite pas le nombre maximale de variétés de pommes de terre vendues lors d'une transaction. -On peut donc dire que le nombre de variétés de pommes de terre vendues est **illimité**. - -{% /callout %} - -## Définition de nos cardinalités - -Il est temps d'en finir avec notre MCD et ces histoires de cardinalités ! - -Voici comment on va définir nos cardinalités : - -- **Pomme de terre** et **Vente** : - - Une pomme de terre peut être vendue plusieurs fois, mais pas forcément _(0,N)_ - - Une vente concerne au moins une pomme de terre, jusqu'à une infinité de pommes de terre _(1,N)_ -- **Salarié** et **Vente** : - - Un salarié peut réaliser plusieurs ventes, mais pas forcément _(0,N)_ - - Une vente est réalisée par un et un seul salarié _(1,1)_ - -En ajoutant des verbes **à l'infinitif** pour expliquer la relation entre les entités, on obtient : - -![MCD - Relations entre entités](/merise/mcd-4.webp) - -Et là, on est presque bon ! -Il nous manque juste un petit détail : la **quantité** vendue d'une variété de pomme de terre au cours d'une vente. - -## Relations N-N - -Si on regarde de plus prêt notre relation **INCLURE** entre **Pomme de terre** et **Vente**, on se rend compte qu'il s'agit d'une relation **N-N** _(Many to Many)_. - -Ce type de relation permet l'ajout d'attributs à la relation elle-même. -Lors de l'étape suivante _(MLD)_, on verra comment gérer ce type de relation. - -Ici, on va pouvoir ajouter un nouvel attribut à notre relation : **Quantité**. - -![MCD - Relations N-N](/merise/mcd-5.webp) - ---- - -Gros morceau, n'est-ce pas ? 😅 - -## Ressources supplémentaires - -- [La vérité sur les id - Jean Prulière](https://jeanpruliere.medium.com/la-v%C3%A9rit%C3%A9-sur-les-id-507134adda12) - ---- - -Prochaine étape, on parle du **MLD** _(Modèle Logique de Données)_ ! diff --git a/app/data/docs/merise/mpd/page.md b/app/data/docs/merise/mpd/page.md new file mode 100644 index 0000000..f4ff3d2 --- /dev/null +++ b/app/data/docs/merise/mpd/page.md @@ -0,0 +1,5 @@ +--- +title: Modèle Physique de Données (MPD) Merise +description: Apprenez à créer le MPD dans Merise, la dernière étape pour concrétiser votre base de données sur un SGBD. +tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] +--- diff --git a/app/lib/navigation.ts b/app/lib/navigation.ts index 762725c..da9785d 100644 --- a/app/lib/navigation.ts +++ b/app/lib/navigation.ts @@ -47,11 +47,12 @@ export const navigation: NavigationSection[] = [ type: navigationsTypes.CERTIFICATIONS, position: "auto", links: [ - { title: "Résumé", href: "/certifications/dwwm", subitems: [] }, + { title: "Résumé du titre", href: "/certifications/dwwm", subitems: [] }, { title: "Activité Type 1", href: "/certifications/dwwm/at1", subitems: [ + { title: "Résumé de l'AT", href: "/certifications/dwwm/at1" }, { title: "CP 1", href: "/certifications/dwwm/at1/cp1" }, { title: "CP 2", href: "/certifications/dwwm/at1/cp2" }, { title: "CP 3", href: "/certifications/dwwm/at1/cp3" }, @@ -62,6 +63,7 @@ export const navigation: NavigationSection[] = [ title: "Activité Type 2", href: "/certifications/dwwm/at2", subitems: [ + { title: "Résumé de l'AT", href: "/certifications/dwwm/at2" }, { title: "CP 5", href: "/certifications/dwwm/at2/cp5" }, { title: "CP 6", href: "/certifications/dwwm/at2/cp6" }, { title: "CP 7", href: "/certifications/dwwm/at2/cp7" }, @@ -79,6 +81,7 @@ export const navigation: NavigationSection[] = [ title: "React", href: "/docs/react", subitems: [ + { title: "Introduction", href: "/docs/react" }, { title: "Initialisation", href: "/docs/react/initialisation" }, { title: "Syntaxe JSX", href: "/docs/react/jsx" }, { title: "Premier composant", href: "/docs/react/premier-composant" }, @@ -99,8 +102,11 @@ export const navigation: NavigationSection[] = [ title: "Merise", href: "/docs/merise", subitems: [ + { title: "Introduction", href: "/docs/merise" }, { title: "Dictionnaire de données", href: "/docs/merise/dictionnaire-de-donnees" }, - { title: "Modèle Conceptuel de Données", href: "/docs/merise/modele-conceptuel-de-donnees" }, + { title: "Modèle Conceptuel de Données", href: "/docs/merise/mcd" }, + { title: "Modèle Logique de Données", href: "/docs/merise/mld" }, + { title: "Modèle Physique de Données", href: "/docs/merise/mpd" }, ], }, ], diff --git a/app/public/merise/mcd-2.webp b/app/public/merise/mcd-2.webp deleted file mode 100644 index 47b6cb3..0000000 Binary files a/app/public/merise/mcd-2.webp and /dev/null differ diff --git a/app/public/merise/mcd-3.webp b/app/public/merise/mcd-3.webp deleted file mode 100644 index 39cc519..0000000 Binary files a/app/public/merise/mcd-3.webp and /dev/null differ diff --git a/app/public/merise/mcd-4.webp b/app/public/merise/mcd-4.webp deleted file mode 100644 index 3d652eb..0000000 Binary files a/app/public/merise/mcd-4.webp and /dev/null differ diff --git a/app/public/merise/mcd-5.webp b/app/public/merise/mcd-5.webp deleted file mode 100644 index fa17479..0000000 Binary files a/app/public/merise/mcd-5.webp and /dev/null differ diff --git a/app/public/merise/mcd-basic.webp b/app/public/merise/mcd-basic.webp new file mode 100644 index 0000000..fcc6e93 Binary files /dev/null and b/app/public/merise/mcd-basic.webp differ