Aller au contenu principal

Materialized Path (chemin matérialisé)

Dans les bases de données relationnelles, représenter une hiérarchie peut être complexe. Les modèles classiques, comme Adjacency List ou Nested Sets, nécessitent des requêtes récursives ou des mises à jour délicates pour récupérer les descendants, ancêtres ou construire un fil d’Ariane.

PostgreSQL propose l’extension ltree, spécialement conçue pour représenter des arborescences de manière simple et efficace. Elle permet de stocker un chemin complet pour chaque nœud et fournit des opérateurs et fonctions pour manipuler ces chemins.

L’extension introduit le type ltree, qui est une chaîne de labels séparés par des points, représentant le chemin depuis la racine jusqu’au nœud. Chaque segment (label) correspond à un nœud de l’arbre.

Il représente le chemin complet depuis la racine, ce qui simplifie toutes les opérations sur l’arbre.

Trouver toutes les familles descendantes d’une catégorie​

Utilisation d'un nouvel opérateur <@

select famille
FROM famille
WHERE famille.arborescence <@ 'Jardin.Primeur.Legumes';

Trouver toutes les ancetres d’une famille​

SELECT f.*
FROM famille f
JOIN famille cible ON cible.code = '02POTIR'
WHERE f.arborescence @> cible.arborescence
ORDER BY nlevel(f.arborescence);