diff --git a/app/pages/docs/merise/mpd/+Page.mdx b/app/pages/docs/merise/mpd/+Page.mdx index 6ea9458..074c27e 100644 --- a/app/pages/docs/merise/mpd/+Page.mdx +++ b/app/pages/docs/merise/mpd/+Page.mdx @@ -5,6 +5,7 @@ tags: [Backend, Merise, BDD, MCD, MLD, MPD, SQL] --- import DictionnaryTable from "../dictionnaire-de-donnees/DictionnaryTable"; +import Callout from "@/components/Callout"; import tabs from "./tabs"; Prêt·e pour la dernière étape de la méthodologie Merise ? 🎉 @@ -62,10 +63,80 @@ En ajoutant les informations techniques, il devient : +Ça en fait du beau monde ! 😅 + +Il est important de noter que le dictionnaire de données doit être mis à jour à chaque fois qu'une modification +est apportée au modèle de données ainsi qu'à la base de données. + +Maintenant, il est temps de réaliser le **MPD** à partir du **MLD** et du **dictionnaire de données** ! + +## 🛠️ Outils pour créer le MPD + +Bien que j'ai recommandé d'utiliser [Looping](https://looping.fr/) pour créer les schémas de données, +il ne permet pas de créer le MPD. + +Il n'est pas pour autant à mettre à la poubelle, car il permet de créer le MCD et le MLD très facilement, ainsi que +le LDD _(Langage de Définition de Données)_ dont on va parler un peu plus tard ! + +Divers outils en ligne permettent de générer des schémas graphiques de bases de données. +Cependant, ils ne sont pas tous adaptés à la création de MPD. + +La plupart du temps, on retrouvera des outils qui permettent de réaliser des ERD _(Entity Relationship Diagram)_. +La différence dans ces outils est qu'ils se basent davantage sur une syntaxe de type **UML** _(Unified Modeling Language)_. + + + En général, les outils qui utilisent une syntaxe de type UML utilisent des **losanges** pour représenter les relations entre les entités. + Dans le cas de Merise, on utilise des **lignes** et **flèches basiques** pour représenter les relations entre les entités/tables. + + Il est aussi possible que tu tombes sur des "pattes de poulet" _(comme dirait une consœur jurée)_ ou **crow's foot notation** + qui est une autre façon de représenter les relations entre les entités/tables. + + C'est joli, **mais c'est pas Merise** ! 😅 + + +De mon côté, j'utilise [DrawDB](https://drawdb.app/) qui est un outil en ligne gratuit et open-source. +Il permet de créer des schémas de bases de données avec la possibilité de configurer l'apparence des lignes de relation, +ainsi que de générer un diagramme à partir d'un fichier SQL. + +## 🔨 Création du MPD + +Pour créer le MPD, il va juste falloir t'armer de patience selon la taille de ton MLD et de ton outil. + +Dans ton outil, tu devras indiquer les types de données et les contraintes d'intégrité pour chaque colonne de chaque table. +Mais ça tombe bien, on a déjà fait le plus gros du travail avec le MLD et le dictionnaire de données ! + +À la fin, on se retrouve avec un schéma qui ressemble à ça : + +![Exemple de MPD](/images/merise/mpd-1.webp) + ## 📜 Préparation du LDD -Le **MPD** est la dernière étape avant de passer à la phase de **LDD** _(Langage de Définition de Données)_. -Il est donc important de bien le préparer pour éviter les erreurs lors de la création des tables. +Dernière ligne droite : le **LDD** _(Langage de Définition de Données)_ ! Le **LDD** correspond tout simplement à la création des tables dans le SGBD, par l'utilisation des commandes SQL -comme `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, etc. \ No newline at end of file +comme `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, etc. + +Il est possible de le créer à partir de [DrawDB](https://drawdb.app/) en exportant le schéma au format SQL, mais également +depuis [Looping](https://looping.fr/) ! + +De notre côté, voici à quoi ressemble le LDD pour le MPD ci-dessus : + + + +Et voilà, on en a fini avec le MPD ! 🎉 + +## Conclusion + +Ça y est, on peut souffler un bon coup ! 🍹☀️ + +Non seulement on a créé le **MPD**, mais on a également mis à jour le **dictionnaire de données** avec les informations techniques +tout en préparant le **LDD** pour créer les tables dans le SGBD. +On peut le dire : on est des pros de la méthodologie Merise ! 😎 + +... ou presque ! Merise va plus loin que la simple modélisation de bases de données. +Mais ça, je t'invite à le découvrir par toi-même 😉 + +Si tu souhaites aller plus loin dans la méthodologie Merise, je te recommande de lire la +[quatrième édition du guide pratique Merise](https://www.editions-eni.fr/livre/merise-guide-pratique-4e-edition-modelisation-des-donnees-et-des-traitements-manipulations-avec-le-langage-sql-conception-d-une-application-mobile-android-ou-ios-9782409046667) +aux Éditions ENI. +Il a été écrit par [Jean-Luc Baptiste](https://www.editions-eni.fr/jean-luc-baptiste) qui maîtrise le sujet sur le bout des doigts. \ No newline at end of file diff --git a/app/pages/docs/merise/mpd/tabs.tsx b/app/pages/docs/merise/mpd/tabs.tsx index 9e16921..4478867 100644 --- a/app/pages/docs/merise/mpd/tabs.tsx +++ b/app/pages/docs/merise/mpd/tabs.tsx @@ -60,6 +60,66 @@ ON UPDATE NO ACTION ON DELETE NO ACTION;`, }, ]; +const sqlBandManagerSnippets = [ + { + name: "LDD final", + codeLanguage: "sql", + withLineNumbers: true, + code: `CREATE TABLE "musician" ( + "id_musician" SERIAL NOT NULL, + "lastname" VARCHAR(30) NOT NULL, + "firstname" VARCHAR(30) NOT NULL, + "instruments" VARCHAR[] NOT NULL, + "email" VARCHAR(50) NOT NULL, + "password" CHAR(64) NOT NULL, + PRIMARY KEY("id_musician") +); + +CREATE TABLE "event" ( + "id_event" SERIAL NOT NULL, + "datetime" TIMESTAMP NOT NULL, + "location" VARCHAR(30) NOT NULL, + PRIMARY KEY("id_event") +); + +CREATE TABLE "concert" ( + "id_concert" SERIAL NOT NULL, + "price" MONEY, + "event_id" SERIAL NOT NULL, + PRIMARY KEY("id_concert") +); + +CREATE TABLE "rehearsal" ( + "id_rehearsal" SERIAL NOT NULL, + "event_id" SERIAL NOT NULL, + PRIMARY KEY("id_rehearsal") +); + +CREATE TABLE "musician_participates_event" ( + "musician_id" SERIAL NOT NULL, + "event_id" SERIAL NOT NULL, + PRIMARY KEY("musician_id", "event_id") +); + +ALTER TABLE "concert" +ADD FOREIGN KEY("event_id") REFERENCES "event"("id_event") +ON UPDATE NO ACTION ON DELETE NO ACTION; + +ALTER TABLE "rehearsal" +ADD FOREIGN KEY("event_id") REFERENCES "event"("id_event") +ON UPDATE NO ACTION ON DELETE NO ACTION; + +ALTER TABLE "musician" +ADD FOREIGN KEY("id_musician") REFERENCES "musician_participates_event"("musician_id") +ON UPDATE NO ACTION ON DELETE NO ACTION; + +ALTER TABLE "event" +ADD FOREIGN KEY("id_event") REFERENCES "musician_participates_event"("event_id") +ON UPDATE NO ACTION ON DELETE NO ACTION;`, + }, +]; + export default { sqlExample: () => , + sqlBandManager: () => , }; diff --git a/app/public/downloads/merise/band-manager.lo1 b/app/public/downloads/merise/band-manager.lo1 index 170187c..c0e294a 100644 Binary files a/app/public/downloads/merise/band-manager.lo1 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 index c0e294a..65434ca 100644 Binary files a/app/public/downloads/merise/band-manager.loo and b/app/public/downloads/merise/band-manager.loo differ diff --git a/app/public/downloads/merise/example.lo1 b/app/public/downloads/merise/example.lo1 index cf3ba85..01b4ab5 100644 Binary files a/app/public/downloads/merise/example.lo1 and b/app/public/downloads/merise/example.lo1 differ diff --git a/app/public/downloads/merise/example.loo b/app/public/downloads/merise/example.loo index 01b4ab5..aedb229 100644 Binary files a/app/public/downloads/merise/example.loo and b/app/public/downloads/merise/example.loo differ diff --git a/app/public/images/merise/mpd-1.webp b/app/public/images/merise/mpd-1.webp new file mode 100644 index 0000000..a09b8e8 Binary files /dev/null and b/app/public/images/merise/mpd-1.webp differ