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 :
- **Entité 1** : code identité 1, attribut 2, attribut 3
- **Entité 2** : code identité 2, attribut 2, attribut 3
- **Entité 3** : code identité 3, attribut 2, attribut 3
- **Entité 1** : code entité 1, attribut 2, attribut 3
- **Entité 2** : code entité 2, 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é ?">
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** 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 ?
@ -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é 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 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">
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**.
</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
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 !
## 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
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** !
</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 :
- Attributs :
@ -41,7 +71,10 @@ Commençons par les **entités** et leurs **attributs**, on verra les cardinalit
### 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 :
@ -57,7 +90,7 @@ Les seules choses que nous avons à faire sont :
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** !
@ -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 notre exemple, on a une relation **One to Many** entre **Entité 1** et **Entité 3**.
Leurs cardinalités nous indique que :
Dans notre cas, on a une relation **One to Many** entre **Événement** et l'héritage _(**Concert** et **Répétition")_.
<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é 3** peut avoir plusieurs **Entité 1** _(0,N)_
@ -86,4 +129,6 @@ 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)
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