|
|
|
|
Je m'excuse pour le titre particulièrement non explicite mais je ne voyais pas vraiment comment nommer ce topic. Je vais essayer d'être plus clair dans mon explication.
Tout d'abord, je précise que je suis développeur Java débutant et que je n'ai pas l'habitude de manipuler des bases de données MySQL autre que des choses très simples à unique but de stockage.
Pour une application je dispose d'un arbre composé d'objet "noeuds" génériques. Objet qui peut se décliner en un certain nombre de "noeuds spécifiques". Mes noeuds possèdent tous un identifiant, ainsi qu'un numéro de noeud père.
Mon arbre se construit donc à partir d'un noeud racine (qui n'aura donc pas de père), chaque noeud possédant un nombre non défini de fils, c'est à dire des noeuds qui possède son identifiants comme numéro de noeud père.
Rien de bien exotique, un arbre quoi.
Pour gérer cela en java, facile, une classe "noeud" abstraite et des classes héritées noeuds spécifiques, une liste de type "noeud", chaque noeud instancié avec le bon type ...
Mon problème viens donc du stockage en MySQL et plus particulièrement dans l'exploitation de la base. Chaque "noeud spécifique" est stocké dans une table spécifique, les noeuds ont donc en commun les fameux id et idpere, le reste des champs étant spécifique.
J'ai besoin d'accéder à tous mes noeuds en une seule requête, notamment pour le parcours de l'arbre, mais sans avoir besoin de connaître le nombre de type de noeud possible. En effet, je cherche à faire un code générique pouvaint s'adapter à un base de données qui évolue (ajout/suppression de type de noeud).
En d'autre terme, je ne veux pas faire un SELECT idnoeud FROM Noeudtype1, Noeudtype2 ....
Je veux que la gestion soit transparente, pouvoir accéder directement à la l'objet dans la bonne table spécifique à partir d'une table "noeud" qui référencerai tout le monde. En gros une table qui représenterai mais liste d'objets "noeud" en java.
ça existe en SQL ? :')
Ou je dois me taper le remplissage de ma table "noeud" à la main en parallèle des tables spécifiques ? (ce qui ne résoudrait même pas tous les problèmes)
merci d'avance pour vos pistes ( et rien que pour avoir lu ça jusqu'au bout ...)
Configuration: Windows XP Firefox 2.0.0.7
Table noeud:
id int auto_increment, clé primaire id_pere int ..... où .... sont les éventuels valeurs du noeud après en java tu fait une fonction de recherche d'un noeud dans un noeud racine en fonction de son id et une autre avec recherche sur id_père et là c'est tout simple, le noeud racine de tous aura id=-1 ou 0 ensuite tu parcours la liste des noeuds construit à partir du retour du SELECT et tu cherches ceux avec l'id_père -1 ou 0 et tu fais cela en récursif. Dès que tu ajoutes un fils à l'arbre, tu lances la fonction en récursif pour lui chercher tous ses fils et les ajouter. Sinon y a plus simple pour stocker ton arbre, tu stocke en XML avec la librairie java JDOM |
Merci pour ta réponse, néanmoins mon problème ne se trouve pas dans la construction de l'arbre à partir de la bdd, ça je savais le faire et j'avais opté pour cette solution, à savoir une table en dur récapitulant tous mes noeuds avant de m'apercevoir d'un problème.
|
Une table pour chaque type de noeud, ça je ne peux pas l'éviter, chacun ayant des données différentes.
|
Donc tu pourrais pas te satisfaire d'une table
|
Mes noeuds sont en fait des éléments d'un réseau.
|
Pour infos, j'ai trouvé ce que je voulais faire.
|