7. Associations réflexives (nomenclatures, hiérarchies)▲
7-1. Nomenclatures▲
Reprenons un exemple proposé par Donald Chamberlin (co-inventeur de SQL avec Raymond Boyce)
et qui figure dans son article
« Recursion in SQL: Tips and Techniques », paru en mai 1996 dans
Database Programming and Design. Cet exemple concerne plus précisément une nomenclature des pièces
qui entrent dans la composition des ailes d'avion.
Les tables sont les suivantes :
Graphe correspondant (une aile est composée de 5 longerons, 1 aileron, 1 train ; etc.) :
Une pièce peut entrer dans la composition de plusieurs pièces (sauf d'elle-même...) et une pièce peut
être composée de plusieurs autres pièces. La modélisation avec MySQL Workbench ne pose pas de problème
particulier, on met en œuvre deux liens identifiants (icône « 1:n Identifying Relationship »)
et on remplace la cardinalité 1,N par 0,N tant pour les composants (une aile n'entre dans la composition
d'aucune pièce) que pour les composés (un rivet n'est composé d'aucune pièce) :
Pour afficher le nom des rôles, se reporter au paragraphe 10.11. Pour la petite histoire, la représentation ci-dessus correspond
à la dérivation du MCD merisien suivant :
Ou à la dérivation du diagramme de classes UML :
7-2. Hiérarchies▲
Prenons le cas de la hiérarchie des personnes de l'entreprise Dubicobit : une personne
peut être encadrée par une personne au plus (le président n'est encadré par personne, sic !)
et une personne peut encadrer plusieurs personnes. La modélisation conceptuelle est la suivante :
Cette modélisation conceptuelle donne habituellement lieu au diagramme MWB suivant, caractéristique
de l'auto-référence :
Mais comme cette façon de procéder permet au bonhomme Null d'infecter la
base de données, il est préférable de représenter ainsi la hiérarchie :
Pour ceux qui utilisent la notation « Connect to columns " », c'est-à-dire
« à la ACCESS », il est intéressant de comparer la représentation d'une hiérarchie
selon ACCESS et MySQL Workbench.
Représentation selon MySQL Workbench :
Représentation selon ACCESS :