7
votes

Meilleure méthode pour rechercher des données hiérarchiques

Je cherche à construire une installation qui permet de poser des données avec un filtrage hiérarchique. J'ai quelques idées comment je vais y aller, mais je me demandais s'il y a des recommandations ou des suggestions qui pourraient être plus efficaces.

Par exemple, imaginez qu'un utilisateur cherche un emploi. Les zones de travail seraient les suivantes. P>

1: Scotland
2: --- West Central
3: ------ Glasgow
4: ------ Etc
5: --- North East
6: ------ Ayrshire
7: ------ Etc


2 commentaires

Vous pouvez faire des requêtes récursives, si votre structure de table la prend en charge: MSDN.MicRosoft.com /en-us/library/ms186243.casaspx


Avez-vous envisagé de modéliser vos informations dans XML et de la stocker dans un attribut XML (sur la table de base de données) afin que vous puissiez la questionner à l'aide de XQuery?


5 Réponses :


2
votes

Vous devez utiliser des ensembles imbriqués. Voici une mise en œuvre dans MySQL. http://mikehillyer.com/articles/maning-hierarchical-data-in -MySQL /


1 commentaires

Cette réponse concerne les "ensembles imbriqués" comme technique pour traiter des données hiérarchiques. Il vient de lier une bonne explication de celui-ci qui se trouve sur un site mysql. Il n'y a rien d'impliqué dans celui qui est spécifique à MySQL.



2
votes

Vous pouvez utiliser Expressions de table communes pour faire des requêtes récursives. Je trouve cette technique très puissante, facile à lire et facile à entretenir.


0 commentaires

3
votes

Voici une approche que j'ai vue utilisée:

Créer un champ de varchar (max) appelé hierarchyide. Générez des identifiants de base pour tous les objets racines. Pour chaque objet enfant génère un identifiant et le prépendez avec les identifiants parent (s). P>

exemple de table p> xxx pré>

Exemple requête P>

SELECT * FROM Areas Where HierarchyID LIKE 'sl%'


3 commentaires

Dans SQL Server 2008, ils ont introduit un type de données, hiérarchyide, pour gérer cette approche: msdn.microsoft.com/en-us/magazine/cc794278.aspx


Cette approche ressemble à une implémentation légèrement différente de ma option 1 idée. Nice et simple, mais cela signifierait chaque fois qu'une mise à jour de la catégorie arrive que l'heiratchayid devrait être réévalué.


@Wduffy Oui, vous devez vous assurer que votre insertion et vos mises à jour calculent correctement le hiérarchyide. Au lieu d'utiliser des codes comme dans l'exemple ci-dessus, j'ai utilisé les identifiants. par exemple. Au lieu de 'slwcgg', j'utiliserais '/ 1/2/3 /'.



1
votes

Comment de cela?

Table => P>

ID Parentide Nom P>

Belle table simple? P>

Alors que de la pièce compliquée de la pièce compliquée PF SQL pour aller avec ça? (CTES Rock je pense) P>

 ---- parent 1
 -------- child 1
 -------- child 2
 ------------ child 2.1
 ---- parent 2
 -------- etc


0 commentaires

0
votes

J'utilise le modèle d'arbre de Joe Celko pour la hiérarchie de la taxe de vente (État / comté / City / Misc) dans notre application et cela fonctionne bien.

Vos "Trouver des travaux dans cette zone ou ci-dessous" On dirait quelque chose comme ceci: xxx

CELKO ARBRE EN ARTICLE SQL


0 commentaires