docs/merise #20

Merged
GauthierWebDev merged 15 commits from docs/merise into main 2025-04-22 17:25:33 +00:00
9 changed files with 76 additions and 12 deletions
Showing only changes of commit dc8b54ad47 - Show all commits

View File

@ -50,9 +50,9 @@ On a ici un MCD qui représente trois **entités** :
Chacune de ces entités a plusieurs **attributs** qui lui sont propres : Chacune de ces entités a plusieurs **attributs** qui lui sont propres :
- **Entité 1** : code identité 1, attribut 2, attribut 3 - **Entité 1** : code entité 1, attribut 2, attribut 3
- **Entité 2** : code identité 2, attribut 2, attribut 3 - **Entité 2** : code entité 2, attribut 2, attribut 3
- **Entité 3** : code identité 3, attribut 2, attribut 3 - **Entité 3** : code entité 3, attribut 2, attribut 3
<Callout type="question" title="Pourquoi le premier attribut est en gras et souligné ?"> <Callout type="question" title="Pourquoi le premier attribut est en gras et souligné ?">
Dans le MCD, un attribut en gras est un attribut **unique**. Dans le MCD, un attribut en gras est un attribut **unique**.
@ -72,6 +72,7 @@ Ici, on a :
- **Entité 1** 0,N - Contenir - 0,N **Entité 2** - **Entité 1** 0,N - Contenir - 0,N **Entité 2**
- **Entité 1** 1,1 - Posséder - 0,N **Entité 3** - **Entité 1** 1,1 - Posséder - 0,N **Entité 3**
- **Entité 3** 0,N - Diriger - 0,1 **Entité 3**
Mais qu'est-ce que ça veut dire tout ça ? Mais qu'est-ce que ça veut dire tout ça ?
@ -93,6 +94,8 @@ Toujours dans l'exemple précédent, on comprend donc que :
- **Entité 2** peut être contenue entre 0 et N **Entité 1** - **Entité 2** peut être contenue entre 0 et N **Entité 1**
- **Entité 1** doit posséder 1 et 1 seule **Entité 3** - **Entité 1** doit posséder 1 et 1 seule **Entité 3**
- **Entité 3** peut être possédée entre 0 et N **Entité 1** - **Entité 3** peut être possédée entre 0 et N **Entité 1**
- **Entité 3** peut diriger entre 0 et N **Entité 3**
- **Entité 3** peut être dirigée par 0 ou 1 **Entité 3**
<Callout type="note" title="Les différentes valeurs"> <Callout type="note" title="Les différentes valeurs">
La plupart du temps, nous allons retrouver les valeurs suivantes : La plupart du temps, nous allons retrouver les valeurs suivantes :
@ -109,6 +112,22 @@ Toujours dans l'exemple précédent, on comprend donc que :
Si la valeur n'est pas connue à l'avance ou qu'aucune limite n'est nécessaire, on utilisera alors **N**. Si la valeur n'est pas connue à l'avance ou qu'aucune limite n'est nécessaire, on utilisera alors **N**.
</Callout> </Callout>
## Les relations réflexives
En regardant notre exemple, on se rend compte que l'entité **Entité 3** est reliée à elle-même par une relation.
C'est ce qu'on appelle une **relation réflexive**.
C'est un cas particulier qui va nous permettre de créer une relation entre une entité et elle-même,
sans avoir à créer une nouvelle entité.
### Situation concrète
Prenons un exemple concret avec une entité **Catégorie**.
Si l'on souhaite qu'une catégorie puisse regrouper plusieurs sous-catégories _(et que ces sous-catégories puissent elles-mêmes regrouper d'autres sous-catégories)_,
on va créer une relation réflexive entre la catégorie et elle-même.
De cette manière, on va pouvoir créer une hiérarchie entre les catégories.
## Retour sur notre dictionnaire de données ## Retour sur notre dictionnaire de données
Maintenant que l'on sait comment fonctionne un MCD, on va pouvoir retourner sur notre dictionnaire de données pour le formaliser en MCD. Maintenant que l'on sait comment fonctionne un MCD, on va pouvoir retourner sur notre dictionnaire de données pour le formaliser en MCD.

View File

@ -12,6 +12,40 @@ Le MLD est la suite normale et directe du MCD dans le processus Merise. Son but
On parlera plus tard du MRD, mais globalement : c'est la même chose que le MLD ! On parlera plus tard du MRD, mais globalement : c'est la même chose que le MLD !
## Qu'est-ce que le MLD ?
Le **MLD** est un schéma qui va nous permettre de représenter les données que l'on a récupérées dans le MCD, mais en ajoutant des détails techniques.
Il va nous permettre de représenter les différentes données que l'on a, regroupée dans une **table**, ainsi que les relations entre elles au travers de **clés étrangères**, de **clés primaires** et de **tables de jointure**.
Contrairement au MCD, le MLD n'est pas destiné à être compris par le client.
## Exemple de MLD
Reprenons le premier exemple de MCD, dans l'article précédent :
![Exemple de MCD](/images/merise/mcd-basic.webp)
On a ici un MCD qui représente trois **entités** :
- **Entité 1**
- **Entité 2**
- **Entité 3**
À partir de ce MCD, on va pouvoir créer un MLD.
Voici à quoi il ressemble :
![Exemple de MLD](/images/merise/mld-basic.webp)
On a ici un MLD qui représente trois **tables** :
- **table_1**
- **table_2**
- **table_3**
Mais surtout : on a ajouté des **clés primaires**, des **clés étrangères** et une **table de jointure** !
Pour le moment ça semble bizarre voire magique, on va prendre le temps de décortiquer tout ça.
## Transformation du MCD en MLD ## Transformation du MCD en MLD
Comme dit plus tôt, le MLD découle directement du MCD. Comme dit plus tôt, le MLD découle directement du MCD.
@ -22,10 +56,6 @@ Il va donc reprendre les mêmes **entités** et **attributs** que le MCD, mais e
On parlera aussi de **clé primaire** et de **clé étrangère** ! On parlera aussi de **clé primaire** et de **clé étrangère** !
</Callout> </Callout>
Reprenons le premier exemple de MCD, dans l'article précédent :
![Exemple de MCD](/images/merise/mcd-basic.webp)
Pour pouvoir le transformer en MLD, il y a plusieurs éléments à prendre en compte : Pour pouvoir le transformer en MLD, il y a plusieurs éléments à prendre en compte :
- Attributs : - Attributs :
@ -42,6 +72,9 @@ Commençons par les **entités** et leurs **attributs**, on verra les cardinalit
### Convertir les entités et attributs ### Convertir les entités et attributs
Pour cette étape, ça va être très simple ! Pour cette étape, ça va être très simple !
On vient reprendre notre MCD correspondant à la gestion d'un groupe de musique :
![MCD final](/images/merise/mcd-4.webp)
Les seules choses que nous avons à faire sont : Les seules choses que nous avons à faire sont :
@ -57,7 +90,7 @@ Les seules choses que nous avons à faire sont :
Voici donc les tables et colonnes que l'on obtient : Voici donc les tables et colonnes que l'on obtient :
![Exemple de MLD sans relations](/images/merise/mld-basic-no-relation.webp) ![Exemple de MLD sans relations](/images/merise/mld-1.webp)
Pour l'instant, on a juste remplacé les **entités** par des **tables** et les **attributs** par des **colonnes**. Il nous reste plus qu'à ajouter les **clés primaires** et les **clés étrangères** ! Pour l'instant, on a juste remplacé les **entités** par des **tables** et les **attributs** par des **colonnes**. Il nous reste plus qu'à ajouter les **clés primaires** et les **clés étrangères** !
@ -76,8 +109,18 @@ Un troisième cas existe, dans le cas où la relation est réflexive _(une entit
Dans le cas d'une relation **One to Many**, on va ajouter une **clé étrangère** dans la table qui est du côté de la relation **One** _(1)_. Dans le cas d'une relation **One to Many**, on va ajouter une **clé étrangère** dans la table qui est du côté de la relation **One** _(1)_.
Dans notre exemple, on a une relation **One to Many** entre **Entité 1** et **Entité 3**. Dans notre cas, on a une relation **One to Many** entre **Événement** et l'héritage _(**Concert** et **Répétition")_.
Leurs cardinalités nous indique que :
<Callout type="question" title="Mais il n'y a pas de cardinalité ici !">
Effectivement, aucune cardinalité n'est présente entre l'héritage et l'entité générique !
Dans ce cas précis, on considère que l'héritage est une relation **One to Many**.
C'est-à-dire :
- **Événement** doit être spécialisé par **Concert** ou **Répétition** _(1,1)_
- **Concert** peut spécialiser plusieurs **Événement** _(0,N)_
- **Répétition** peut spécialiser plusieurs **Événement** _(0,N)_
</Callout>
- **Entité 1** doit avoir un et un seul **Entité 3** _(1,1)_ - **Entité 1** doit avoir un et un seul **Entité 3** _(1,1)_
- **Entité 3** peut avoir plusieurs **Entité 1** _(0,N)_ - **Entité 3** peut avoir plusieurs **Entité 1** _(0,N)_
@ -87,3 +130,5 @@ On va donc ajouter une **clé étrangère** dans la table **Entité 1** qui va f
![Exemple de MLD avec relation One to Many](/images/merise/mld-basic-one-to-many.webp) ![Exemple de MLD avec relation One to Many](/images/merise/mld-basic-one-to-many.webp)
Et là : tu remarqueras que la **clé étrangère** est en italique et est préfixée par un `#` ! Et là : tu remarqueras que la **clé étrangère** est en italique et est préfixée par un `#` !
C'est un petit rappel pour nous indiquer que c'est une **clé étrangère**.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB