Outils pour utilisateurs

Outils du site


cours:informatique:dev:db:modeliser_bases_de_donnees:220_associer_les_classes

Associez vos classes pour garder du lien dans vos données

Notes et transcription du cours Modélisez vos bases de données disponible sur la plateforme Openclassrooms.

Alors. Où en êtes-vous ? Vous avez identifié toutes les classes ainsi que leurs attributs. À ce stade, toutes les colonnes du fichier CSV ont trouvé une place dans votre modélisation. Vous savez par exemple que les informations sur la réalisatrice “Cathy Verney” seront stockées dans la classe Realisateur_ice, et que la série “Vernon Subutex” sera enregistrée dans la classe SerieTV.

Mais ces deux informations sont séparées dans deux classes distinctes. Or, il faut que vous puissiez indiquer le lien qui lie “Vernon Subutex” à sa réalisatrice : et à ce stade, ce lien n’est pas encore modélisé.

Vous l’aurez compris, dans ce chapitre, vous allez créer du lien entre les classes.

Constituez vos associations

Pour créer vos associations, je vous propose de tracer des traits qui relient vos classes, et de leur donner un label, de préférence un verbe tel que « réalise », « produit », etc.

Je vous laisse le faire de votre côté et je vous donne ma réponse juste en dessous, mais ne trichez pas, je vous fais confiance hein !

Définissez les multiplicités de vos associations

Il y a un concept très important quand on définit une association : c’est la notion de multiplicité.

Elle permet de définir si pour notre besoin, un film peut être réalisé par UN SEUL ou par PLUSIEURS réalisateurs, et inversement : si un réalisateur peut produire UN SEUL ou PLUSIEURS films.

Il ne faut pas négliger les multiplicités, car ceci aura des implications dans le SGBDR. Par exemple, si vous considérez à tort qu’un réalisateur ne peut réaliser qu’un seul film, alors la structure de votre BDD ne sera pas faite pour accueillir plus d’un film par réalisateur : et pour modifier cette structure, ce sera un peu plus complexe qu’on ne le pense.

Il existe trois types d’associations :

  • Plusieurs à plusieurs (many-to-many) :
    • un film peut être réalisé par plusieurs réalisateurs, et un réalisateur peut avoir réalisé plusieurs films ;
  • Un à plusieurs (one-to-many) ou plusieurs à un (many-to-one) :
    • un film n’est réalisé que par 1 au plus société de production, et une société peut produire plusieurs films ;
  • Un à un (one-to-one) :
    • vous n’avez pas ce cas dans vos données, mais c’est lorsqu’une instance d’une classe A ne peut être associée qu’à 1 au plus instance d’une classe B. Et qu’une instance de B ne peut être associée qu’à 1 au plus instance de A. Par exemple, un cinéma n’a qu’une seule adresse, et une adresse donnée ne peut accueillir qu’un seul cinéma.

Ensuite, vous pouvez aller plus loin dans la précision des multiplicités.

Par exemple, quand vous dites « au plus 1 », vous pouvez préciser s’il s’agit de « strictement 1 », ou bien « 0 ou 1 ». Aussi, quand vous dites « plusieurs », vous pouvez entendre « 0, 1 ou plus », ou bien « strictement plus que 1 », etc.

Voici comment noter cela :

Au plus 1 :

Notation Abréviation Signification
0..1 (pas d'abréviation) 0 ou 1
1..1 1 Exactement 1

Plusieurs :

Notation Abréviation Signification
0..* * 0, 1 ou plus
1..* (pas d'abréviation) Au moins 1
n..n n Exactement n (où n est un nombre entier)
m..n (pas d'abréviation) Au moins m et au plus n (avec m et n nombres entiers tels que m<n)

Voici comment s’utilisent ces notations :

  • Un film peut être réalisé par au moins 1 réalisateur (noté 1..* ) , et un réalisateur peut avoir produit 0, 1 ou plusieurs (noté * ) films :

Ajout des multiplicités entre Film et Réalisateur-ice

  • Un film est réalisé par exactement 1 société de production ( 1 ), et une société peut produire 0, 1 ou plusieurs films ( * ) :

Les multiplicités entre Film et Société de production

  • Un cinéma a exactement 1 adresse ( 1 ), et une adresse donnée ne peut accueillir que 0 ou 1 seul cinéma ( 0..1 ) :

Les multiplicités entre Cinema et Adresse

Retenez bien de quel côté de l’association placer vos deux multiplicités : ne les inversez pas ! ;)

Le choix du minimum fixé à 0 ou 1 est souvent discutable. Dans l’exemple ci-dessus, considérer qu’un réalisateur peut avoir produit 0, 1 ou plusieurs films, c’est considérer qu’il peut y avoir dans votre BDD un réalisateur qui n’est associé à aucun film.

Si la notion de réalisateur est centrale dans le fonctionnement de votre application, alors vous pouvez décider qu’un réalisateur peut exister sans avoir produit de film.

Mais si la notion de réalisateur est secondaire, alors vous pouvez dire « Non, telle que j’ai conçu mon appli, réalisateur sans film, ça ne sert à rien », et donc choisir une multiplicité de 1..* au lieu de *.

Voici donc votre modélisation avec les multiplicités :

Les termes multiplicité et cardinalité sont souvent confondus. Mais officiellement, une multiplicité désigne l’ensemble des cardinalités possibles entre deux instances.

Par exemple, on dira qu’une société de production peut produire 0, 1 ou plusieurs films. Cela correspond à une multiplicité de 0..*.

Et concrètement, dans vos données :

  • La société “Les Films de Pierre” a produit “120 Battements par minute” et “Arthur Rambo” (ce qui correspond à une cardinalité égale à 2) ;
  • La société “Haut et Court” a produit trois films (cardinalité de 3).

Caractérisez vos associations grâce aux classes d’association

Il arrive de devoir donner des caractéristiques à une association.

Peut-être qu’intuitivement, vous aviez envie de dessiner ce schéma conceptuel…

… au lieu de dessiner trois classes : Film, Tournage et Lieu, comme nous l’avons fait précédemment.

Et vous auriez eu raison ! Mais dans ce cas, vous n’auriez pas réussi à placer les colonnes Date de début et Date de fin. En fait, ces deux dates sont des caractéristiques de l’association qui unit un lieu à un film.

Eh bien, sachez qu’il est possible de donner des caractéristiques à un lien, grâce à une classe d’association. Ici, comme l’association s’appelle « est tourné », vous pouvez appeler votre classe « Tournage » :

L'ajout de la classe d'association

Ce n’est pas très différent de ce que l’on avait avant, non ?

C’est vrai : les deux options sont similaires et acceptables, et votre choix n’aura pas d’incidence quand vous entrerez votre modélisation dans le SGBDR.

Renforcez vos associations grâce à la composition

Il existe un type d’association particulier, appelé l’association de composition. Celle-ci s’utilise quand une classe est un composant d’une autre classe.

Prenez l’exemple d’un circuit électronique : il est composé de composants électroniques : diodes, condensateurs, microprocesseurs, etc. Ainsi, on peut avoir une association de composition entre une classe CircuitElectronique et une classe CompostantElectronique.

Imaginez que votre circuit soit défaillant et que vous deviez donc le jeter. Dans ce cas, vous jetez automatiquement tous ses composants. C’est là la particularité de la composition : le composant (une diode, par exemple) ne peut exister que via son composite (circuit électronique).

Pour votre appli, vous pourriez considérer qu’un tournage est un composant du film. En effet, rien ne sert d’enregistrer dans votre BDD un tournage si vous ne savez pas à quel film il est associé.

On peut aussi avoir une composition entre Film et SocieteDeProduction. En effet, un film ne peut exister si une société ne l'a pas produit. De plus, il existe parfois des films différents ayant le même nom (exemple : au moins quatre films portent le titre Home). Ainsi, pour identifier un film de manière certaine, on a besoin de son titre mais aussi du nom de sa société de production, ce qui prouve le lien de dépendance entre ces deux classes.

Voici comment cette composition aurait été représentée : avec un losange noir (plein) du côté du composite :

Représentation d'une composition

La composition s’emploie quand ces trois caractéristiques sont réunies :

  1. Le composite est « composé » de composants.
  2. L’association de composition est de type un-à-plusieurs, car le composite peut avoir plusieurs composants (0..1, 1, * ou 1..*), et le composant appartient à un et un seul composite (la multiplicité est donc forcément 1, rien d’autre) : on dit que le composite n’est pas partageable.
  3. Il y a un lien entre le cycle de vie du composite et du composant : un composant disparaît dès que l'objet composite auquel il appartient est supprimé.
La composition est un cas particulier d’association un-à-plusieurs.

Tadaaaaaaam ! Je vous présente donc, en exclusivité, la dernière version de notre modélisation UML !

Le modèle de conception de données

Prenez garde à la redondance !

Attention, la redondance peut aussi se cacher dans les associations !

Par exemple, vous pouvez être tenté de dire qu’un réalisateur travaille pour une société de production lorsqu’il réalise un film. On aurait donc ceci :

Cependant, on peut déduire l’association travaille pour grâce aux deux autres associations. En effet, si on sait que “Le Temps des égarés” est réalisé par “Virginie Sauveur” et produit par “Delante Productions”, alors on déduit que “Virginie Sauveur” a travaillé pour “Delante Productions”.

À vous de jouer

Voici un diagramme de classes représentant des concerts donnés par des groupes de musique. Déterminez les multiplicités possibles des associations :

Le diagramme de classe des concerts

Vous avez réalisé l’exercice ? Découvrez ma solution ci-dessous.

Voici une réponse possible :

En résumé

  • Graphiquement, on modélise les associations entre les classes par des traits qui les relient.
  • Une association peut être de trois types :
    • plusieurs-à-plusieurs ;
    • un-à-plusieurs ;
    • un-à-un.
  • On précise ces trois types grâce aux multiplicités :0..1, 1, 1..*, etc.
  • Une association peut avoir des caractéristiques, que l’on indique dans une classe d’association.
  • Pour indiquer qu’une association est de type « composant », on utilise une composition.

Voilà, vous avez posé les bases de votre diagramme UML. Maintenant, il ne reste plus qu’à le perfectionner grâce aux possibilités du langage UML.

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/dev/db/modeliser_bases_de_donnees/220_associer_les_classes.txt · Dernière modification : 2024/11/27 22:56 de yoann