Aller au contenu
MCD → MLD

Association réflexive → MLD

Une association réflexive se traduit par une clé étrangère vers la même table, nommée d'après le rôle et le plus souvent nullable. Une réflexive n-n donne une table de liaison à deux clés.

  • réflexive
  • auto-référence
  • hiérarchie
  • rôle
  • récursive

Syntaxe

Modèle
(0,n)–(0,1) : t(cle PK, …, cle_role FK → t)   nullable(0,n)–(0,n) : lien(cle_role1 FK → t, cle_role2 FK → t)              clé primaire = (cle_role1, cle_role2)

Exemple

Exemple concret
MCD : EMPLOYE (0,n) encadrant ── ENCADRER ── (0,1) encadré EMPLOYEMLD : employe(num_employe PK, nom, num_encadrant FK → employe)   nullable  num_employe | nom   | num_encadrant  1           | Léa   | NULL    ← directrice, sans encadrant  2           | Karim | 1  3           | Hugo  | 2Réflexive n-n : COURS (0,n) ── NECESSITER ── (0,n) COURS  → necessiter(code_cours FK → cours, code_prerequis FK → cours)    clé primaire = (code_cours, code_prerequis)

À retenir

  1. Nommez la clé étrangère d'après le rôle (num_encadrant, code_prerequis) : le nom num_employe est déjà pris par la clé primaire.
  2. La clé est nullable parce qu'il existe toujours un sommet de hiérarchie ; NOT NULL rendrait la première insertion impossible.
  3. Interdisez l'auto-référence si la règle l'exige : CHECK (num_encadrant <> num_employe). Les cycles plus longs (A encadre B qui encadre A) relèvent d'un contrôle applicatif.
  4. Pour parcourir toute la hiérarchie en SQL, on utilise une requête récursive (WITH RECURSIVE).
  5. Piège : créer une table encadrant séparée qui duplique les employés. Un encadrant est un employé : une seule table, deux rôles.

Voir aussi