Stocker et parcourir les hiérarchies en SQL
La modélisation et la récupération d'informations hiérarchiques dans des bases de données sont essentielles pour de nombreuses applications. Une méthode populaire est l’algorithme modifié de traversée de précommande (MPTT).
Algorithme MPTT
MPTT organise les données hiérarchiques dans une seule table, avec trois colonnes par nœud :
-
ID : L'identifiant unique du nœud.
-
Gauche : Index du nœud le plus à gauche dans le sous-arbre des nœuds.
-
Droite : L'index du nœud le plus à droite dans le sous-arbre des nœuds.
Insérer dans l'arbre
Pour insérer un nouveau nœud enfant dans l'arborescence, il nous faut :
- Trouvez la bonne valeur du nœud parent.
- Définit la valeur Right du nœud enfant sur la valeur Right 1 du nœud parent.
- Définit la valeur Right du nœud parent sur la valeur Right 2 du nœud parent.
- Définit la valeur Gauche du nœud enfant sur la valeur Droite - 1 du nœud parent.
Traverser l'arbre
MPTT permet de parcourir facilement l'arborescence à l'aide de requêtes SQL explicites :
-
Récupérer tous les nœuds enfants d'un nœud : SELECT * FROM table WHERE Left BETWEEN parent.Left AND parent.Right
-
Obtenir tous les descendants d'un nœud : SELECT * FROM table WHERE Left > parent.Left AND Right <
- Obtenir tous les ancêtres d'un nœud : SELECT * FROM table WHERE Left < node.Left AND Right >
Autres méthodes de modélisation
En plus de MPTT, d'autres méthodes de stockage des hiérarchies incluent :
Modèle de liste de contiguïté : - Utilisez deux tables pour représenter la hiérarchie, une table contenant les relations parent-enfant et l'autre table contenant des données de nœuds supplémentaires.
Figure : - Modélise les hiérarchies sous forme de nœuds connectés par des bords, offrant une flexibilité de jointure et de requête complexe.
Bibliothèque de classe
Diverses bibliothèques simplifient le travail avec MPTT et d'autres structures de données hiérarchiques dans des langages de programmation comme PHP et Java :
POIRE::Arbre
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!