Composition

De même que l’Agrégation, il existe un autre type de relation entre deux entités qui permet de composer des éléments de façon plus complexe.

En effet, si l’Agrégation permet de modéliser au sein d’une base de données des liens unilatéraux entre des éléments elle deviens inutilisable dans des cas plus complexes. L’idée ici est de décrire qu’un élément A se compose d’un ensemble d’éléments B. Inversement, cet élément B sera composé d’une série d’éléments A.

Je sens que certains seront vite perdu avec ces explication hasardeuses, reprenons donc notre exemple de modélisation de constructions avec des Lego.

Pour définir une construction en Lego, nous admettrons que celle-ci est en fait un ensemble de briques, de diverses tailles, formes et couleurs assemblés les unes aux autres. Ce qui au final nous donne notre construction. Il s’agit donc d’un lien de composition entre nos entités BRIQUE et CONSTRUCTION.

Le modèle suivant décris ce comportement de façon simple : Une Construction est composée de Briques ou dans l’autre sens, un ensemble de Briques composent une Construction :

Ici vous devez lire ce schéma de la façon suivante :

Une Construction est composée de 0 ou plusieurs Briques.
Une Brique entre dans la composition de 0 ou plusieurs Constructions.

Porteuse de données

Cependant, la solution proposée imposera très vite ses limites pour certains cas. Par exemple ici, comment déterminer le nombre d’une même Brique nécessaire au sein d’une construction ?

Car comme nous le verrons plus loin lors de la création de notre base de données, l’intérêt de modéliser correctement est d’atteindre une intégrité parfaite de nos données. De ce fait il serait incongru de voir apparaitre une même occurrence de notre relation COMPOSER plusieurs fois.

Pour ce faire, nous utiliserons un cas particulier de la Composition : la relation porteuse de données. Ce cas ne s’applique qu’exclusivement aux relations « Composées ». Si lors de vos modélisations vous vous retrouvez avec une Agrégation porteuse de données, c’est que vous avez commis une erreur et que la donnée portée par la relation doit en réalité s’appliqué au sein d’une des entités reliées.

Pour illustrer le cas des relations porteuses de données, nous allons modifier notre exemple précédant en y ajoutant ceci :

Une Construction est composée de Briques. A chaque utilisation d’une brique dans notre construction, nous prendrons soin d’incrémenter la propriété « nombre » de la relation COMPOSER.

Lire la suite