Transformation des classes d'association

Objectif

  • Savoir exprimer les propriétés des classes d'association en modèle relationnel.

Mise en situation

Supposez que vous modélisiez une plateforme de mise en relation entre des auto-entrepreneurs et des clients : chaque auto-entrepreneur peut accepter plusieurs missions, et chaque client peut travailler avec plusieurs auto-entrepreneurs.

Naturellement, en modèle conceptuel, vous utilisez une association N:M entre client et auto-entrepreneurs : mais vous voulez aussi stocker le nom du projet, par exemple. Il faut alors stocker la propriété dans l'association directement, et vous la transformez en classe d'association.

Mais comment, en passant au modèle relationnel, représenter ces propriétés ? C'est ce que vous allez découvrir dans ce module.

MéthodeClasse d'association N:M

Les attributs de la classe d'association sont ajoutés à la table issue de l'association N:M.

@startumlskinparam defaultFontName Inconsolataskinparam classFontStyle boldskinparam linetype orthoskinparam nodesep 80hide circleclass Classe1 {a : type {unique}b : type}class Classe2 {c : type {unique}d : type}class ClAssoc as "Cl-Assoc" {e : typef : type}Classe1 "0..N"-right-"0..N" Classe2(Classe1, Classe2) .. ClAssoc@enduml
1
Table1 (#a, b)
2
Table2 (#c, d)
3
Assoc (#a=>Table1,#c=>Table2, e, f)

Exemple

DescriptionInformations[1]

@startuml

skinparam defaultFontName Inconsolata

skinparam classFontStyle bold

skinparam linetype polyline

skinparam nodesep 100

hide circle

class Hotel {

nom : string {unique}

adresse : string

codePostal : string

ville : string

étoiles : integer

}

class Restaurant {

nom : string {unique}

étoiles : integer

}

Hotel "1..1" - "*" Restaurant : est-situé <

class Visiteur {

num_fidélité : integer {unique}

nom : string

prénom : string

}

class Séjour {

date : Date

}

Visiteur "*" - "*" Hotel

(Hotel, Visiteur) .. Séjour

@enduml

1
Hotel(#nom:string, adresse:string, codePostal:string, ville:string, étoiles:integer)
2
Restaurant (#nom:string, étoiles:integer, hotel=>Hotel) avec hotel non null
3
Visiteur(#num_fidélité:integer, nom:string, prénom:string)
4
Séjour(#visiteur=>Visiteur, #hotel=>Hotel, date)