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 :
+
+
+
## 📜 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