Aller au contenu

TNSI : BDD - Types Relations entre Tables⚓︎

Différents Types de Relations et Schématisations UML vs ERD⚓︎

La schématisation précédente - un trait simple - est imparfaite et ne suffit pas totalement à résumer le lien complexe entre deux tables quelconques. En effet, revenons à notre site de VOD proposant de louer des vidéos (pour 24H) :

  • un utilisateur dispose d'une seule zone géographique
  • mais une même zone géographique peut être choisie par plusieurs utilisateurs

La schématisation précédente ne permet en effet pas, en son état actuel, de rendre compte de ces subtilités. Pour combler cela, on ajoute plusieurs informations à l'entrée à et à la sortie des tables, qui permettent de rendre compte des divers types de relations entre tables. Il existe (au moins) deux notations concurrentes :

  • la notation UML : Unified Modeling Language
  • la notation ERD : Entity Relation Diagram
  • etc ..

Diagrammes ERD / Diagramme Entité-Association

On ajoute trois informations à la relation symbolisée par un trait entre les tables :

  • à gauche : un symbole représentant le min (encore appelé ordinalité) qui modélise le nombre minimum de fois qu'une instance dans une table/entité (sortante) peut être associée à une instance de l'autre table/entité (cible)
  • à droite : un symbole représentant le max (encore appelé cardinalité) qui modélise le nombre maximum de fois qu'une instance dans une table/entité (sortante) peut être associée à une instance de l'autre table/entité (cible)
  • l'association (en général un verbe, un extrait de phrase) qui détaille plus précisément la relation entre ces deux tables/entités

Relations 1 à 1⚓︎

Notation UML - Unified Modeling Language⚓︎

  • Un utilisateur du site dispose d'une (unique) carte client matérielle dès son inscription sur le site.
  • Une carte client appartient à un seul client

Col

classDiagram class utilisateur { * id prenom nom email # id_zone # id_carte } class carte_client { * id_carte # id_utilisateur validite } utilisateur "1..1" -- "1..1" carte_client:appartenance

Col

classDiagram class utilisateur { * id prenom nom email # id_zone # id_carte } class carte_client { * id_carte # id_utilisateur validite } utilisateur "1,1" -- "1,1" carte_client:appartenance

Col

Notation UML

Symbole
\(min..max\)
\(min,max\)
Signification
\(0\) Zéro
\(1..1\)
(quelquefois \(1\))
Un
\(1\)
\(0..1\)
\(0,1\)
Zéro ou Un
\(n\)
\(0..n\)
\(0,n\)
Zéro ou Plusieurs
\(1..n\)
\(1,n\)
(quelquefois \(n\))
Un ou Plusieurs
\(\infty\) une infinité

Signification

Un utilisateur "est le propriétaire" d'exactement une carte client.
Une carte client appartient exactement à un utilisateur

Association

Appartenance : doit quelquefois être pensée à l'envers
quand on la lit dans l'autre sens...

Notation ERD - Entity Relation Diagram⚓︎

Col

erDiagram utilisateur ||--|| carte_client : "appartenance" utilisateur { int id str prenom str nom str email int id_zone int id_carte } carte_client { int id_carte int id_utilisateur date validite }

Col

Notation ERD

Symbole Signification
Un
Plusieurs
(ou \(\infty\))
Un (et seulement Un)
Zéro ou Un
Un ou Plusieurs
(ou \(\infty\))
Zéro ou Plusieurs
(ou \(\infty\))

Signification: Idem

Association: Idem

Relations 1 à n (plusieurs)⚓︎

  • un utilisateur habite dans une (unique) zone géographique
  • une zone géographique est peuplée/associée à (aucun ou) plusieurs utilisateurs du site

Col

classDiagram class utilisateur { * id prenom nom email # id_zone # id_carte } class zone_geographique { * id_zone nom } utilisateur "1" -- "n" zone_geographique:est associé à

Signification

Un utilisateur habite/est associé à exactement une zone géographique Une zone géographique est associé à aucun ou plusieurs utilisateurs

Association

"est associé à"

Col

erDiagram utilisateur ||--o{ zone_geographique : "est associé à" utilisateur { int id str prenom str nom str email int id_zone int id_carte } zone_geographique { int id_zone str nom }

Signification : Idem

Association : Idem

Relations n (plusieurs) à n (plusieurs)⚓︎

  • Un utilisateur peut louer aucun ou plusieurs films
  • Un film peut être loué par aucun ou plusieurs utilisateurs

Col

classDiagram class utilisateur { * id prenom nom email # id_zone # id_carte # Code } class film { * Code Titre Réalisateur Durée Date de Sortie Note Spectateurs } utilisateur "n" -- "n" film:louer

Signification

Un utilisateur peut louer aucun ou plusieurs films.
Un film peut être loué (à la demande...) par aucun ou plusieurs utilisateurs

Association

"louer"

Col

erDiagram utilisateur o{--o{ film : "louer" utilisateur { int id str prenom str nom str email int id_zone int id_carte int Code } film { int Code str Titre str Realisateur int Duree int Date_de_Sortie float Note_Spectateurs }

Signification : Idem

Association : Idem