Compare commits
3 Commits
961d3d93ae
...
3f1b0fc18a
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f1b0fc18a | |||
| 175e3f2be9 | |||
| ba076d580f |
@ -69,7 +69,7 @@ Pour pouvoir le transformer en MLD, il y a plusieurs éléments à prendre en co
|
|||||||
|
|
||||||
Commençons par les **entités** et leurs **attributs**, on verra les cardinalités après 😉
|
Commençons par les **entités** et leurs **attributs**, on verra les cardinalités après 😉
|
||||||
|
|
||||||
### 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 :
|
On vient reprendre notre MCD correspondant à la gestion d'un groupe de musique :
|
||||||
@ -94,7 +94,7 @@ Voici donc les tables et colonnes que l'on obtient :
|
|||||||
|
|
||||||
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** !
|
||||||
|
|
||||||
### Convertir les relations
|
## Convertir les relations
|
||||||
|
|
||||||
Pour convertir les relations, il faut d'abord se poser la question de la cardinalité maximale de chaque relation.
|
Pour convertir les relations, il faut d'abord se poser la question de la cardinalité maximale de chaque relation.
|
||||||
|
|
||||||
@ -105,11 +105,11 @@ Il y a deux possibilités :
|
|||||||
|
|
||||||
Un troisième cas existe, dans le cas où la relation est réflexive _(une entité se relie à elle-même)_.
|
Un troisième cas existe, dans le cas où la relation est réflexive _(une entité se relie à elle-même)_.
|
||||||
|
|
||||||
#### One to Many
|
### ➡️ One to Many
|
||||||
|
|
||||||
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 cas, on a une relation **One to Many** entre **Événement** et l'héritage _(**Concert** et **Répétition")_.
|
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 !">
|
<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 !
|
Effectivement, aucune cardinalité n'est présente entre l'héritage et l'entité générique !
|
||||||
@ -130,3 +130,89 @@ Et là : tu remarqueras que les **clés étrangères** sont en italique et sont
|
|||||||
|
|
||||||
On constate également que des flèches sont apparues entre les tables.
|
On constate également que des flèches sont apparues entre les tables.
|
||||||
Ces flèches nous permettent de visualiser le sens de la relation entre les tables, en partant de la table contenant la **clé étrangère** vers la table contenant la **clé primaire**.
|
Ces flèches nous permettent de visualiser le sens de la relation entre les tables, en partant de la table contenant la **clé étrangère** vers la table contenant la **clé primaire**.
|
||||||
|
|
||||||
|
### 🔀 Many to Many
|
||||||
|
|
||||||
|
Pour cette deuxième possibilité, il est impossible de stocker une clé étrangère dans l'une des deux tables.
|
||||||
|
Il faut alors créer une **table de jointure** qui va faire le lien entre les deux tables.
|
||||||
|
|
||||||
|
Cette table se caractérise par :
|
||||||
|
|
||||||
|
- **Son nom** :
|
||||||
|
- Généralement composé des deux tables qu'elle relie, séparées par un `_` _(ex: `table_1_table_2`)_
|
||||||
|
- Peut aussi être un nom plus explicite, comme `table_1_action_table_2`
|
||||||
|
- **Ses colonnes** :
|
||||||
|
- Deux colonnes qui vont faire référence aux **clés primaires** des deux tables qu'elle relie
|
||||||
|
- Les potentielles autres colonnes qui sont spécifiques à la relation
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ici, nous avons une relation **Many to Many** entre les tables **musician** et **event**.
|
||||||
|
Une table de jointure a donc été créée, qui s'appelle `musician_participates_event`.
|
||||||
|
|
||||||
|
Cette table contient deux colonnes qui font référence aux **clés primaires** des tables **musician** et **event**.
|
||||||
|
|
||||||
|
<Callout type="question" title="Pourquoi il n'y a pas de clé primaire dans la table de jointure ?">
|
||||||
|
Il n'est pas nécessaire d'ajouter une clé primaire dans la table de jointure.
|
||||||
|
|
||||||
|
Pour rendre unique chaque enregistrement, on viendra _(plus tard !)_ créer une **clé unique** sur les deux colonnes qui fait référence aux **clés primaires** des tables qu'elle relie.
|
||||||
|
|
||||||
|
C'est ce qu'on appelle une **clé composite**.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
### 🔄 Relations réflexives
|
||||||
|
|
||||||
|
Dans notre situation, nous n'avons pas de relation réflexive.
|
||||||
|
Mais le premier exemple donné sur cet article possède une relation réflexive sur l'entité **Entité 3**.
|
||||||
|
|
||||||
|
Pas besoin de revenir tout en haut de l'article, je te le remets juste ici :
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Dans cet exemple, on retrouve une relation réflexive entre l'entité **Entité 3** et elle-même.
|
||||||
|
Cette relation est définie avec une cardinalité **0,1** - **0,N**.
|
||||||
|
|
||||||
|
On appliquera la même logique que pour une relation **One to Many** que l'on a vu plus haut.
|
||||||
|
On retrouvera donc une **clé étrangère** dans la table **table_3** qui va faire référence à la **clé primaire** de la même table.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 🎉 MLD final
|
||||||
|
|
||||||
|
Et voilà, on a terminé notre MLD !
|
||||||
|
Oui, pour de vrai 😁
|
||||||
|
|
||||||
|
Voici à quoi il ressemble :
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## MLD et MRD
|
||||||
|
|
||||||
|
Le MLD et le MRD sont deux choses différentes, mais qui se ressemblent beaucoup.
|
||||||
|
|
||||||
|
Le MLD est un modèle **logique** de données, qui est un schéma **graphique**.
|
||||||
|
Le MRD, lui, est un modèle **relationnel** de données, qui est un schéma **textuel**.
|
||||||
|
|
||||||
|
Les informations présentes seront les mêmes, seule la forme change.
|
||||||
|
|
||||||
|
<Callout type="question" title="Si c'est quasiment pareil, pourquoi faire le MRD ?">
|
||||||
|
Le MRD n'est pas obligatoire, mais il permet une représentation plus linéaire.
|
||||||
|
À toi de voir si tu souhaites le faire ou non, mais il est souvent plus simple à lire !
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
Pour notre MLD final, voici à quoi il ressemblerait en MRD :
|
||||||
|
|
||||||
|
musician(**<u>id_musician</u>**, lastname, firstname, instruments, **email**, password)
|
||||||
|
musician_participates_event(_#id_musician_, _#id_event_)
|
||||||
|
event(**<u>id_event</u>**, datetime, location)
|
||||||
|
concert(**<u>id_concert</u>**, price, _#event_id_)
|
||||||
|
rehearsal(**<u>id_rehearsal</u>**, _#event_id_)
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Par rapport au MCD, le MLD est beaucoup plus rapide à réaliser. _(en même temps, tous les choix ont été faits avant !)_
|
||||||
|
|
||||||
|
Ce schéma permet de visualiser les relations entre les différentes tables de manière simple et efficace, sans avoir à se soucier des détails techniques.
|
||||||
|
|
||||||
|
Mais pour le moment, on n'a pas encore parlé des types de données des colonnes, ni des index à créer sur les tables...
|
||||||
|
Rendez-vous pour la prochaine et dernière étape : le **MPD** _(Modèle Physique de Données)_ ! 🚀
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
BIN
app/public/images/merise/mld-3.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/public/images/merise/mld-4.webp
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
app/public/images/merise/mld-5.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |