Une association réflexive (ou unaire) est une association qui relie une entité à elle même.
Une association réflexive peut être de type [n,n], [1,n], ou [1,1].
Elles peuvent avoir des propriétés et être symétriques ou non symétriques.
Voici par exemple une association réflexive [n,n] symétrique :
Elle est symétrique car, si un pays A est voisin d'un pays B, alors le pays B est nécessairement voisin du pays A.
Voici à présent une association réflexive [n,n] non symétrique :
Si un matériel A fait partie d'un matériel B, alors B ne peut pas faire partie de A.
Pour une relation réflexive asymétrique, il est d'usage d'indiquer le nom de l'association sur un des traits et le nom de l'association inverse sur l'autre.
En voici un exemple non symétrique :
et voici un exemple symétrique :
Elles sont nécessairement non symétriques. Exemple :
Elles peuvent être symétriques ou non symétriques.
Voici par exemple une association réflexive [1,1] symétrique :
Et voici un exemple d'association réflexive [1,1] asymétrique :
Pour les associations réflexives, l'utilisation d'identifiants comme nom de clef étrangère pose problème. Cela impliquerait des relations possédant deux attributs de même nom. Il faut donc procéder autrement.
Une association reflexive [n,n] sur une entité E est traduite en une relation de même nom avec deux clefs étrangères. L'une d'elles porte le nom de l'identifiant de l'entité et l'autre, le nom de l'association. La clef primaire de cette relation est constituée de ces deux attributs.
Exemple :
sera traduit en :
|
Voisin_De (#NomPays,#VoisinDe) |
Une association reflexive [1,n] sur une entité est traduite en une clef étrangère dans la relation représentant cette entité. Le nom de cette clef étrangère est celui de l'association si c'est le nom de l'association qui étiquette le trait de cardinalité maximale 1, sinon c'est le nom de l'association réciproque.
Par exemple, les deux schémas suivants:
seront traduit en :
|
Salarié (Matricule,Nom,Prénom,Fonction,#Encadré_Par) |
car le nom qui importe est celui qui figure sur le trait de cardinalité [?,1].
Une association reflexive [1,1] sur une entité est traduite en une clef étrangère dans la relation représentant cette entité. Le nom de cette clef étrangère est celui de l'association.
Par exemple :
sera traduit en :
|
Individu (NumInd,Nom,Prénom,#Assis_à_Gauche_De) |