• [^] # Re: Gestion d'arbres par représentation intervallaire

    Posté par (site web personnel) . En réponse au journal Création du projet "OQLToLang". Évalué à 2.

    Il me semble aussi qu'il existe une extension pour postgresql qui permet de gérer des arborescences.


    Oui, il s'agit de ltree ( http://www.sai.msu.su/~megera/postgres/gist/ltree/ ). Comme beaucoup d'extensions PostgreSQL, il s'agit d'un type particulier et d'un ensemble d'opérateurs/fonctions pour ce type (et ça utilise le framework GiST pour les index).

    Le principe est simplissime. L'arbre est créée sous la forme Racine, Racine.Noeud1, Racine.Noeud1.Noeud2. Chaque noeud a donc un libellé propre et un chemin depuis la racine. Ensuite des opérateurs permettent d'obtenir les fils, les parents...

    Pour l'utiliser dans un projet, ça marche très très bien. La seule contrainte est qu'il faut mettre à jour tous les fils quand on déplace un noeud car chaque noeud a le chemin complet de l'arborescence (cette manipulation est triviale mais peut causer la mise à jour d'un grand nombre de noeuds).
    Les opérateurs fournis permettent de manipuler l'arbre de manière triviale et très rapide (en posant les index qui vont mieux).
    Et pour finir, il est très facile de se rendre compte de la tête de l'arbre et de détecter un problème en regardant les lignes de la table, ce qui est loin d'être toujours le cas avec les autres méthodes.

    Le problème, c'est que ce n'est pas portable du tout donc à réserver à des projets pour lesquels la portabilité des requêtes n'est pas une contrainte.