Bonsoir,
J'arrive un peu tard, mais j'ai rédigé quelque chose qui va dans le sens de ce qu'écrit JPhi33. Voici donc.
Je ne me souviens pas d’avoir rencontré la définition de ce qu’est une référence circulaire en Merise. En revanche, dans la théorie relationnelle, au chapitre « Intégrité » , il y a bien une définition en ce sens. Je paraphrase et traduis Chris Date (cf. An Introduction to Database Systems, « Integrity ») :
Cycle rérérentiel
Les tables Rn, R(n-1), R(n-2), ..., R2, R1 forment un cycle référentiel si Rn comporte une clé étrangère faisant référence à R(n-1), à son tour R(n-1) comporte une clé étrangère faisant référence à R(n-2), ..., etc., et au final R1 comporte une clé étrangère faisant référence à Rn :
Rn --> R(n-1) --> R(n-2) --> ... --> R2 --> R1 --> Rn
Une table qui s’auto-référence est un cas particulier de cette situation.
En remontant au niveau Merise :
Si l’on soumet un tel MCD à validation par l’AGL (en l’occurrence Power AMC V11), on a droit à un message d’avertissement (non bloquant) :
« Circularité formée de liens obligatoires »
Conclusion : il est prudent d’interrompre le cycle par une cardinalité 0,1 quelque part.
Une association-type réflexive est un cas particulier :
En observant que, du fait de la cardinalité minimale 1 (côté Subordonné), toute personne a un chef. Donc le général en chef a un chef qui ne peut être que lui-même, donc dans un processus récursif, on apprendra que le général en chef a pour subordonné lui-même et ses subordonnés directs, donc qu’il est hiérarchiquement au même niveau que ces derniers.
Conclusion :
Le général en chef demandera que la cardinalité 1,1 soit transformée en 0,1. Non mais...
M’frez 4 jours.
Ceci correspond à une histoire que j'ai vécue, à ceci près que c'est le colonel qui a demandé le passage à 0,1...
Partager