Planification de la construction d'une structure basée sur un dossier en Java.
J'utiliserai un plug-in jquery pour l'interface graphique, donc je n'ai donc pas besoin d'informations sur la manière d'afficher la structure de dossier. P>
Je cherche la logique backend sur la façon dont les informations de dossier sont stockées , de sorte qu'il puisse être récupéré de manière rapide et efficace. P>
Chaque dossier aura plusieurs sous-dossiers. Dans un dossier de feuilles, nous devrions pouvoir accéder à la racine rapidement et efficacement p>
exemple: p> nouveaux dossiers pourraient être ajoutés au hasard.
Dossier peut être renommé.
Les dossiers peuvent être supprimés. P> Ma question est la suivante: strong> Comment ces détails de dossier seront-ils stockés dans la base de données? P> Encore une fois, je cherche un moyen rapide et efficace de stocker et de récupérer ces informations. p> p>
p>
4 Réponses :
Liste liée, qui est documentée dans l'API Java ici: P>
http://download.oracle.com/ Javase / 6 / Docs / API / Java / Util / LinkedList.html P>
En tant que structure d'informatique générale, lisez ceci: p>
http://en.wikipedia.org/wiki/linked_list P>
J'espère que cela aide p>
En fait plus d'un arbre, comme "Arbre de répertoire".
@Davenewton Merci, mais je cherche des informations sur la manière de stocker les informations dans la base de données (modèle de données) afin que je puisse stocker / récupérer des données rapidement.
@ Kensenjohn Droite, et "rapidement" dépend de la façon dont vous essayez de récupérer.
Pour la base de données, gardez-le simple. Une table nommée dossier - Les seules colonnes seraient ID, nom, parentid. Maintenant, chaque dossier aura un parent et certains dossiers auront des enfants. Charger des enfants:
Pour stocker dans dB, la voie la plus simple et la plus simple est d'avoir un parent_folder_id pour chaque dossier / nœud. Cela devrait être assez bon dans la plupart des scénarios, surtout à construire la structure d'objet de dossier et à faire la base de manipulation sur le modèle d'objet.
dépend de votre exigence, il y a un cas assez courant que vous devez p>
Si c'est ce que vous recherchez, il y a une méthode intéressante que vous avez peut-être un look: Chaque enregistrement de DB aura 2 champ de numéro d'extra, appelons-le à gauche et à droite p>
supposons un arbre comme celui-ci: p> Qu'est-ce qui va être stocké dans dB est p> Lorsque vous devez trouver tous les nœuds sous certains nœuds (N) par SQL, découvrez simplement tous les nœuds avec gauche> N.Left et Droite Vous pouvez facilement Effectuer insertion / Supprimer par la mise à jour en vrac par des nœuds connexes (pas une tâche difficile, le laisser à vous: p) p> Ce n'est probablement pas très sympathique, mais au cas où l'exigence que j'ai mentionnée est ce dont vous avez besoin, u peut envisager d'utiliser cette méthode. p> p>
C'est une bonne question, mais sans beaucoup de détails, il est difficile de parler de la "meilleure" solution.
Vous pouvez mapper ceci à la question abstraite de la façon de stocker un arbre N-Ary dans une relation relationnelle Base de données. P>
Voici certaines des variables qui affectent le problème: p>
Le suivant suppose que votre base de données ne dispose pas de dispositions spéciales pour effectuer des promenades d'arbres. P>
Il y a deux modèles de persistance pure pour les n-aryers. P>
la Tout d'abord, c'est simplement écrire chaque nœud avec une référence parent: p> Cette approche simplifie le déplacement d'un dossier, mais supprime, les requêtes pour tous les sous-dossiers imbriqués et la recherche de la racine deviennent chères. p> Le deuxième modèle pur consiste à persister chaque relation ancestrale séparée des détails du dossier p> ici, le dossier / la nourriture / laiterie / le fromage / cheddar / cheddar produire p> cette approche est très coûteux pour les mouvements et un nouveau répertoire provoque des inserts Mais lire de manière étroite votre question, une variante de la première approche, en ajoutant simplement une racine aussi pourrait-elle Soyez la bonne approche pour vous: P> d code>, où
d code> est le distance de la racine. Mais une liste de sous-armes est une seule requête. Le chemin d'ascendance est également une seule requête; un
commander par distance desc code> vous permettra de vous rendre rapidement à la racine et au premier dossier rapidement. P>
| NodeId | ParentId | RootId | Name | ....
|--------|----------|--------|------------|-----
Merci, j'utiliserai une combinaison de votre réponse et de réponse fournie par @adrianshum. Depuis que je vais utiliser plus de réponse d'Adrian, je le marquerai comme la bonne réponse
Que voulez-vous dire, d'une feuille, accédez rapidement à la racine? la racine i> la racine ou le dossier contenant du dossier? Dans tous les cas, on dirait qu'un mécanisme normal parent_id fonctionnerait, mais sans savoir quels types d'opérations que vous faites, il est difficile de dire comment être efficace.
Et à quelle vitesse pensez-vous que cela doit être? Depuis que vous mentionnez JQuery, cela ressemble à une application Web. La vitesse du réseau sera narfe DB Lookup sur la base d'un identifiant indexé.