diff --git a/app/components/syntax/Callout.tsx b/app/components/syntax/Callout.tsx
index 566b0b7..fc1e4f7 100644
--- a/app/components/syntax/Callout.tsx
+++ b/app/components/syntax/Callout.tsx
@@ -17,6 +17,7 @@ const styles = {
const icons = {
note: (props: { className?: string }) => ,
warning: (props: { className?: string }) => ,
+ question: (props: { className?: string }) => ,
};
export function Callout({
diff --git a/app/components/syntax/Icon.tsx b/app/components/syntax/Icon.tsx
index 862ce62..cbef5a9 100644
--- a/app/components/syntax/Icon.tsx
+++ b/app/components/syntax/Icon.tsx
@@ -14,6 +14,7 @@ const icons = {
theming: ThemingIcon,
lightbulb: LightbulbIcon,
warning: WarningIcon,
+ question: WarningIcon,
};
const iconStyles = {
diff --git a/app/data/docs/merise/modele-conceptuel-de-donnees/page.md b/app/data/docs/merise/modele-conceptuel-de-donnees/page.md
new file mode 100644
index 0000000..4fbfbcc
--- /dev/null
+++ b/app/data/docs/merise/modele-conceptuel-de-donnees/page.md
@@ -0,0 +1,118 @@
+---
+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 :
+
+
+
+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 :
+
+
+
+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 %}
+
+## 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/page.md b/app/data/docs/merise/page.md
index 341600e..90bc534 100644
--- a/app/data/docs/merise/page.md
+++ b/app/data/docs/merise/page.md
@@ -50,6 +50,24 @@ Merise étant français, la plupart des outils internationaux ne sont pas adapt
Pour toutes les rubriques suivantes, **Looping** sera utilisé comme outil.
+## Ressources
+
+{% callout type="warning" title="Ressources disponibles sur internet" %}
+
+**Attention !**
+
+Beaucoup de ressources sur internet parlent de Merise, mais elles ne sont pas forcément justes.
+
+Peu importe l'origine de la ressource, il est important de vérifier les informations et de ne pas se fier aveuglément à ce qui est écrit.
+Je recommande énormément le livre [Guide pratique (4e édition)](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) de **Jean-Luc Baptiste**, aux **Éditions ENI**.
+
+{% /callout %}
+
+- [Looping](https://looping-mcd.fr/)
+- [Mocodo](https://mocodo.net/)
+- [La vérité sur les id - Jean Prulière](https://jeanpruliere.medium.com/la-v%C3%A9rit%C3%A9-sur-les-id-507134adda12))
+- [Merise - Wikipedia]()
+
---
Prochaine étape, on parle du **dictionnaire de données** !
diff --git a/app/lib/navigation.ts b/app/lib/navigation.ts
index f852fb4..4d6b80e 100644
--- a/app/lib/navigation.ts
+++ b/app/lib/navigation.ts
@@ -15,6 +15,7 @@ export const navigation = [
links: [
{ 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" },
],
},
];
diff --git a/app/markdoc/tags.tsx b/app/markdoc/tags.tsx
index 06309f9..1f08a4b 100644
--- a/app/markdoc/tags.tsx
+++ b/app/markdoc/tags.tsx
@@ -9,7 +9,7 @@ const tags = {
type: {
type: String,
default: "note",
- matches: ["note", "warning"],
+ matches: ["note", "warning", "question"],
errorLevel: "critical",
},
},
diff --git a/app/public/merise/mcd-1.webp b/app/public/merise/mcd-1.webp
new file mode 100644
index 0000000..a19b3fe
Binary files /dev/null and b/app/public/merise/mcd-1.webp differ
diff --git a/app/public/merise/mcd-2.webp b/app/public/merise/mcd-2.webp
new file mode 100644
index 0000000..47b6cb3
Binary files /dev/null and b/app/public/merise/mcd-2.webp differ