60 votes

Comment stocker un répertoire / une hiérarchie / une arborescence dans la base de données ?

Comment puis-je stocker un répertoire / une hiérarchie / une arborescence dans la base de données ? A savoir MSSQL Server.

@ olavk : Il ne semble pas que vous ayez vu ma propre réponse. La méthode que j'utilise est bien meilleure que les requêtes récursives :)

p.p.s. C'est la voie à suivre !

21voto

Troels Arvin Points 2454

Il y a de nombreuses façons pour stocker les hiérarchies dans les bases de données SQL. Le choix de l'une ou l'autre dépend du produit SGBD que vous utilisez et de l'utilisation que vous ferez des données. Comme vous avez utilisé la balise MSSQL2005, je pense que vous devriez commencer à considérer le modèle "Adjacency List" ; si vous trouvez qu'il ne fonctionne pas bien pour votre application, alors jetez un coup d'oeil à Comparaison de Vadim Tropashko qui met en évidence les différences entre les modèles en mettant l'accent sur plusieurs caractéristiques de performance.

8voto

Mr. Brownstone Points 3692

Si l'utilisation de Sql Server 2008 est une option, vous devriez peut-être consulter la nouvelle version de l'outil de gestion de la sécurité. hiérarchieid type de données.

5voto

Lars Truijens Points 24005

Il existe également le modèle d'arbres à ensembles imbriqués, qui présente certains avantages par rapport au modèle ParentID. Voir http://www.evanpetersen.com/item/nested-sets.html y http://falsinsoft.blogspot.nl/2013/01/tree-in-sql-database-nested-set-model.html

4voto

roman m Points 9998

Il s'agit plus d'un signet pour moi que d'une question, mais cela pourrait vous aider aussi. J'ai utilisé de cet article approche permettant de stocker un répertoire / une arborescence dans la base de données.

L'article contient également quelques extraits de code utiles.

J'espère que cela vous aidera.

Je ne suis pas affilié à ce site web de quelque manière que ce soit.

3voto

JacquesB Points 19878

Utilisez-vous Ms SQL 2005 ? Requêtes récursives en 2005 rend l'interrogation de données hiérarchiques beaucoup plus élégante.

Edit : Je pense que les chemins matérialisés sont un peu un hack. Le chemin contient des données redondantes non normalisées, et vous devez utiliser des triggers ou quelque chose pour les maintenir à jour. Par exemple, si un noeud change de parent, les chemins de tout le sous-arbre doivent être mis à jour. Et les requêtes sur les sous-arbres doivent utiliser une affreuse correspondance de substring plutôt qu'une jointure élégante et rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X