Transformation des associations 1:N

Objectif

  • Savoir intégrer des associations de type 1:N dans des relations.

Mise en situation

Vous venez de créer un modèle conceptuel qui modélise un système de réservation de chambre d'hôtel. En particulier, votre modèle comporte deux classes : les hôtels, et les chambres.

Chaque chambre ne peut appartenir qu'à un seul hôtel, c'est donc tout naturellement que vous modélisez ce lien par une association 1:N.

Mais pour passer au modèle relationnel, vous ne disposez que du concept de relations : à quel endroit indiquer qu'une chambre est située dans un hôtel en particulier ? Plus généralement, comment transformer les associations 1:N en modèle relationnel ? C'est ce que vous allez découvrir dans ce module.

Méthode

Pour chaque association de type 1:N :

  • on ajoute à la table côté N une clé étrangère vers la table côté 1.

@startumlskinparam defaultFontName Inconsolataskinparam classFontStyle boldskinparam linetype orthohide circleclass Classe1 {a : type{unique}b : type}class Classe2 {c : type {unique}d : type}Classe1 "0..1"-right-"0..N" Classe2: association@enduml
1
Table1 (#a:type, b:type)
2
Table2 (#c:type, d:type, a=>Table1)

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é <

@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

ComplémentExpressions des contraintes de cardinalité minimale

  • Si la cardinalité est exactement 1 côté 1 (1..1), alors on ajoutera une contrainte de non nullité sur la clé étrangère.

  • Si la cardinalité est au moins 1 côté N (1..N), on ajoutera une contrainte d'existence d'enregistrements référençant pour chaque enregistrement de la table référencée : PROJECTION(Table1,a) = PROJECTION(Table2,a).

    La projection d'une table est une opération qui sélectionne un sous-ensemble des attributs de cette table et supprime les doublons.