2010-11-19 38 views
0

Je dois stocker les messages que mon application Web récupère de Twitter dans une base de données locale. Le but du stockage des messages est que j'ai besoin d'afficher ces messages dans un ordre hiérarchique ie certains messages (ie mises à jour d'état) que l'utilisateur saisit via mon application sont des nœuds enfants d'autres (je dois les montrer comme sous-liste du message parent). Quel modèle de données dois-je utiliser Modèle de liste d'adjacence OU Modèle de jeu imbriqué? Je dois gérer quatre types de messages & messages dans chaque catégorie pourrait avoir deux nœud enfant. Une autre question ici est que ce que je vois (réaliser) dans les deux cas que l'entrée est contrôlée manuellement c'est comment la référence au nœud parent dans le modèle de contiguïté ou à droite, à gauche est donnée dans la liste imbriquée. Mon application récupérer les données de messages de Twitter comme:Modèle de liste d'adjectifs OU Modèle de jeu imbriqué, quel modèle de données dois-je utiliser pour stocker mes données hiérarchiques?

foreach ($xml4->entry as $status4) { 
     echo'<li>'.$status4->content.'</li>'; 
     } 

donc son pas de manuel, un certain nombre de messages peut être disponible à tout moment. Comment pourrais-je faire une relation parent-enfant entre les messages de celui-ci. À l'heure actuelle, les utilisateurs entrent des messages dans différentes fenêtres qui correspondent à quatre types de messages, mon application ajoute des mots-clés & récupère ceux à afficher dans les fenêtres diff. Tous ces messages sont actuellement des messages parents. Maintenant, comment je fais l'utilisateur entrer un message qui pourrait être enregistré dans la base de données en tant qu'enfant d'un autre.

Répondre

1

Quand vous dites

profondeur de l'arbre est de 2 nœuds. c'est-à-dire que chaque msg parent peut avoir deux nœuds enfants.

Je suis confus.

Si chacun des deux nœuds enfants peut avoir plus d'enfants, alors vous ne prenez pas la profondeur, mais la largeur d'une branche d'un nœud.

1) profondeur vraiment = 2

Si votre profondeur maximum est vraiment 2 (en d'autres mots, tous les noeuds se connectent à la racine, ou zéro nœuds de niveau en 2 étapes, mais en d'autres mots, pour chaque noeud il n'y a pas d'autre ancêtre que parent et grand-parent) alors vous pouvez même utiliser directement le modèle relationnel pour stocker des données hiérarchiques (soit par auto-jointure, ce qui n'est pas si mal avec une profondeur maximale ou en divisant les données en 3 entités et les enfants)

2) >> profondeur 2

Si le numéro 2 est la largeur et la profondeur est variable et peut-être assez profond puis regarder des ensembles imbriqués, avec deux possibilités supplémentaires pour explorer

  • en utilisant l'idée de jeu imbriqué, vous pouvez explorer le type geom pour stocker des données hiérarchiques (les avantages pourraient ne pas être si intéressants - peu d'opérateurs utiles, un seul champ, une meilleure stratégie d'indexation)
  • continued fractions (basé sur l'ensemble imbriqué, tropashko a offert une généralisation qui semblait intéressante car ils promettaient d'améliorer certains des problèmes avec les imbriqués ensembles; Je ne l'ai pas implémenté mais ... fais tes propres tests).
+0

En fait maintenant j'ai obtenu la confirmation maintenant du superviseur, la profondeur de l'arbre pourrait être arbitraire. N'importe quel nombre de nœuds pourrait être ajouté par l'utilisateur à n'importe quel sous-niveau – XCeptable

+0

Juste pour mentionner que je n'ai pas énuméré l'option de table selfjoining pour des profondeurs arbitraires parce que vous employez mysql et il ne soutient pas les requêtes récursives. Si vous n'êtes pas fixé sur mysql, vous pouvez aussi explorer cette option - par exemple sur postgres. – Unreason

2

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Si vous allez avoir des arbres plus ou moins profondes de données (à partir de chaque nœud racine) envisager d'utiliser ensemble imbriqué, car AL sera lente.

+0

La profondeur de l'arbre est de 2 nœuds. c'est-à-dire que chaque message parent peut avoir deux nœuds enfants. – XCeptable

+0

Donc, je pense que vous pouvez aller avec Ajacency List, mais comme @Unreason a dit, je ne comprends pas pourquoi utiliser des arbres ici du tout. Aller relationnel. –

+0

@FractalizeR: le lien est parti (le nouveau propriétaire de MySQL doit déjà être EVIL, en cachant les connaissances), heureusement que les archives web arrivent à la main: http://web.archive.org/web/20110606032941/http://dev .mysql.com/tech-resources/articles/hierarchical-data.html –