From 2bbf6fae4418427096d1a887f249c5d418ba802d Mon Sep 17 00:00:00 2001 From: GauthierWebDev Date: Tue, 22 Apr 2025 19:21:26 +0200 Subject: [PATCH] feat: Add Callout component and MPD creation content --- app/pages/docs/merise/mpd/+Page.mdx | 77 ++++++++++++++++++- app/pages/docs/merise/mpd/tabs.tsx | 60 +++++++++++++++ app/public/downloads/merise/band-manager.lo1 | Bin 43690 -> 43690 bytes app/public/downloads/merise/band-manager.loo | Bin 43690 -> 43690 bytes app/public/downloads/merise/example.lo1 | Bin 56090 -> 56090 bytes app/public/downloads/merise/example.loo | Bin 56090 -> 56090 bytes app/public/images/merise/mpd-1.webp | Bin 0 -> 32318 bytes 7 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 app/public/images/merise/mpd-1.webp 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 170187ccf76aaa6e4b6c69c6736be1f1b4086f09..c0e294a5369866e1d071a900b9d6b8e7d52b7777 100644 GIT binary patch delta 887 zcmZ9KTS!!45Xb$_?y8?2?c%Cyx@D+kTDhC2)@xRlN}!pi3@>Da9V*%`79wI|QWiZ# z+hDO$R<7$_dNBu#0>OxSNFO2+f-Ehhd@v{L4Vl^XpWUhL?Isaay5n;8G8RiIoaoGtV%% z9Xw$CsuZ>eT5a8btnO&$h~H427aUNmOb)jvAlm~mHV9YbB=IAOCf z6zvcFH*&VquAy#s{MYfciw09~Ead(dfBj&0uQ0!89vT!B6hZ{Uj~*k}QKTg_V04)2 z9R$N|$42OK=;_560%&;{{Si)xHd_+RIYxO5iCDq_BfUl*O_836g73X%IPR3-q*D($ zPE*7($|ex;#0vHBOXnzGLt-tF3U~XA(J2%q6G_BsLjBgk$Ji98bR|Hw%RuO1u216Y zsgh2lsf`Ay_{3%45+yQ;P4LcT&IV%7F delta 922 zcmZ9KZAep57{@(#b9v?#(zaULF0Fj2RBSgdrcTXLRQgcHB76xGsZpjjL_|j~N`l~r zXgyR+%1Yg95!C@JLFh&LkR~BWK}FJs+6O;WkReF)+|S?gl2O+QueGDRx<1bP};pfO7aIfhE+6e$N@lZ)B?*9g2R z&_H8~8=h~JgxiEoTF(;Stt9sC$TDFkHx*Iv7!p|pKSAKBRn00h%Mw?%FAEC<>@{7W zb^d@@t_zm>lG$*cnuGE@mu$p>`PfozRLdsI&i$;qYnZTDaXWz&i-wg~JeFr>4SVL* z(z)}sR|(8!xmi=ym@LS1*bgiaX0K@`(0NdCaU4RISy$XeJiN+fpjL5#Sh1UZsMits z3*I)pP@EPTzNr2>aij+v+G7uoPZ8GLaYu=7=7f}*fnz1@F#>6)R%O`Jsu;q%)Boj{ z(IE*p2ute}IJVRmQOs(*@q{KXe1>~xlpe?y+@L)lpS`hn)$GB(c#AZ9Qh$7Q>!l~k zapr;Fa{6*g6NAa@lh232ps#c$>%ZbxF%LXYuIkyK|KCmC9UA529FAW9N~kI!Awi8K z!mnYTYOq>^BmqAn;2&XL!Bek+mXS>G)T^luJCYHt&zA~|Bh%D`3nOBHsZpM;$7%y& zhVP>SGzUaz3mBm=;Lxu_)q+?NoAmOlz%)(AMH-R{H-o$>1FNmbHe@p*J=>vImkuQ% z5$ZxlSPY6Z6V)svTRLPcWP|aLneITrfe7$E#M7NvhM74+4PR-% zj*q8)6ZdzUh@bFl9B$Lmetb}2qkc>wdNiQWs8n-0LJ%FYD@GxAB2R4SJsxZMT_-_$M^X z-LeQHAjI~F5L3fKoVg*y)?k&m+-ve)XbrQGlQpF>zGOpctU`(s?6KeZa5qM1eQIsA z`*=u0;!#k+`9Pe{6XL{78O1sEjgXx^s4X6zxnhHTT7vJNNm?*2KNYju)g{-kId2W! zFjqW;jiijZnmU5-3qHc9B}x2yljI9gT3D;yWIc7Apx#&ut-Kaef8|xY|2E8DdK&(} zXy`CMOuIN5(y)~d65r1lJehH@H{+pWc$oLpXVKXE$^Xr XewV+^lZ9p;Ex5V0;Gr%g3uoyMFi^=O delta 496 zcmXZYO-NK>6b9hVH`frmh{4UDoXmxbP|67}X_kfyNAWL+xS2DQOnR}%A{7}18bm_D zMPY})Mu~73=SPrX-Zm|gY16`0NJ7D&En3V%M3AIKL`S@fv--|?&UfC_mP&1@^mn2Y z_(5$&_*$_~yi;W(RAwnuo$)IktkXGH(SiDhZ;8`=j}b2J)Noe+N61z-5E?F&DE@iH zM*I1_LL9hviL;d&I% zo}!`5aFAe5IL`Jnai*V&Q#;zPkQ?dK5VYl*n#pZK=7rPdpSDzHO1e_drGF^obwLIH z5>NVUE}UIQ{*|+>X)axWFSGLJPmxpDnQtY0T+ogq8Gj>V=UB+2NIplp2_N1!AHUsu zC$7FE%HHyz1bdQ~qL(-lHF&?b+$jwk(SG7bF_WLf3~r8j=rk5%K4L5G=7D&*l);B9 kCXdCl97>oRP8i&k@X$qGO*~*LY4SkQ;Nql-xnwo{2Uf1s;s5{u diff --git a/app/public/downloads/merise/example.lo1 b/app/public/downloads/merise/example.lo1 index cf3ba859b34f8283f79b52140b9857eed7af1679..01b4ab5f2db6dd6b8a1d27d73f07a8cec94317df 100644 GIT binary patch delta 40 lcmbQWjd|8K<_$L(C7Br*803K128w|c10x7;{>Z3#69BMH2a5mz delta 40 jcmbQWjd|8K<_$L(B^iJ~4v1}_7{q4;5t~0UYTg6@uk8ni diff --git a/app/public/downloads/merise/example.loo b/app/public/downloads/merise/example.loo index 01b4ab5f2db6dd6b8a1d27d73f07a8cec94317df..aedb2291a36b099621f7f0fe721f512782fccf30 100644 GIT binary patch delta 16 YcmbQWjd|8K<_#Yh85uTzWYoL~06fnI@Bjb+ delta 16 YcmbQWjd|8K<_#Yh85uW!WYoL~06f(O@c;k- diff --git a/app/public/images/merise/mpd-1.webp b/app/public/images/merise/mpd-1.webp new file mode 100644 index 0000000000000000000000000000000000000000..a09b8e8f3818c00294dbe29e648484e6c3d88296 GIT binary patch literal 32318 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 literal 0 HcmV?d00001