docs/merise #20
@ -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 :
|
||||
|
||||
<DictionnaryTable isTechnical />
|
||||
|
||||
Ç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)_.
|
||||
|
||||
<Callout type="question" title="Comment reconnaître si mon outil utilise une syntaxe de type UML ?">
|
||||
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** ! 😅
|
||||
</Callout>
|
||||
|
||||
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.
|
||||
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 :
|
||||
|
||||
<tabs.sqlBandManager />
|
||||
|
||||
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.
|
||||
@ -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: () => <Snippet snippets={sqlExampleSnippets} />,
|
||||
sqlBandManager: () => <Snippet snippets={sqlBandManagerSnippets} />,
|
||||
};
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/public/images/merise/mpd-1.webp
Normal file
BIN
app/public/images/merise/mpd-1.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Loading…
Reference in New Issue
Block a user