While I've seen examples for nested sets, je n'ai pas vu grand-chose pour les intervalles imbriqués, bien qu'en théorie il ne devrait pas être difficile de convertir de l'un à l'autre. Au lieu de faire une traversée de pré-commande pour étiqueter les nœuds, faites une récursion de première grandeur. L'astuce consiste à trouver le moyen le plus efficace d'étiqueter n enfants d'un nœud. Puisque le nœud entre a/b et c/d est (a + c)/(b + d), un insert mal conditionné (par exemple, insérer les enfants de gauche à droite), risque de créer la même croissance exponentielle dans les valeurs d'index comme, par exemple, en utilisant un materialized path complet. Il n'est pas difficile de contrer cet effet - créer les nouveaux index un à la fois, en insérant chacun à l'endroit qui produit le dénominateur résultant le plus bas.
En ce qui concerne la dégradation des performances, beaucoup dépend des opérations que vous avez l'intention de faire. Il y a encore quelques opérations qui nécessiteront un ré-étiquetage complet de l'arbre entier - l'ensemble imbriqué ou les méthodes d'intervalle imbriquées fonctionnent mieux pour les structures qui changent rarement. Si vous faites beaucoup de changements de structure dans la hiérarchie, la structure de la table parent-enfant 'standard' peut être plus facile à utiliser. rappelez-vous également que certaines opérations (telles que le nombre de descendants) sont beaucoup plus faciles avec l'étiquetage d'entiers d'ensembles imbriqués que les méthodes d'intervalle.
Jetez un oeil à ma question: http://stackoverflow.com/questions/1049748/improving-nested-sets-modified-preorder-tree-traversal S'il vous plaît commenter là si vous le souhaitez. Je suis en train de faire des recherches sur cet espace maintenant. –
C'est une idée incroyablement ingénieuse, je vais le donner. Mais est-il vraiment plus rapide que les pointeurs parents dans une base de données qui supporte les requêtes récursives, comme le font les récentes versions de toutes les bases de données sérieuses (tout sauf MySQL!)? –