Il ne faut pas mélanger les 2 représentations hiérarchiques ! Mélanger ces 2 représentations est source de redondance, de confusion et donc d'incohérences.
=> Soit tu utilises une clef étrangère ID parrain
=> Soit tu utilises la représentation intervallaire, et là tu n'as plus de colonne "ID parrain", mais seulement des bornes
Définis tes besoins et choisis la représentation de l'arbre en fonction de ces derniers.
Chercher le parrain d'un membre selon son :parrain_id, modèle classique :
SELECT ALL id, nom
FROM membre
WHERE id = :parrain_id
Chercher le parrain d'un membre selon ses :bg et :bd, modèle intervallaire :
SELECT ALL id, nom
FROM membre
WHERE bg < :bg AND bd > :bd -- Parents du membre (bornes englobantes)
ORDER BY bd - bg ASC -- Triés pas proximité (delta du plus faible au plus élevé)
LIMIT 1 -- On en conserve un seul, le parrain
Concernant la màj, lis la section II-K. Insertion d'un élément dans cette arborescence, fais des tests, et en cas de blocage pose des questions précises avec des exemples de données SQL et de requêtes.
https://sqlpro.developpez.com/cours/arborescence/
Partager