IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Gestion hierarchique d'objets


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut Gestion hierarchique d'objets
    Bonjour,

    dans un de mes projets en cours , je vais devoir ajouter un système de hiérarchie dans mes enregistrements en base de données.

    De devrais pour entrer des objets (machines) qui vont dépendre de services et d'unités de production.

    Pour exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Service 1
    Service x
      |
      +__Machine 1 
      |      |
      |      |__Moteur Electique type X
      |      |__Pompe volumétrique type Y
      |
      |__Sous-service AA
             |
    	 +--- Machine 2
    	 |       |
    	 |       +-- Turbo-moteur à vapeur
             |       |      |
             |       |      |___ Pompe huile de lubrification 
             |       |      |___ Filtre à cartouches huile lub	 
    	 |       |
    	 |       |___________ Pompe multi-étage type Z
    	 |
    	etc ...
    Je ne vois pas trop comment m'y prendre pour agencer les données, sachant que l’on devrait pouvoir changer de place les objets dans la hiérarchie. Par exemple si je passe la "Machine 1" dans le Sous-service "AA", les élément enfants doivent suivre le parent : le moteur et la pompe devront se trouver toujours sous la machine.

    Le nombre d'objets gérés est d'environ ~5'000 et 6'000 appareils, j'ai pas trop envie de me planter dès le début ...

    Si vous avez des idées de gestion de cette problématique de hiérarchie je prend !

    Bon week-end à tous

    Olivier

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Je te recommande l'utilisation de la représentation intervallaire:
    http://sqlpro.developpez.com/cours/arborescence/

    Ça nécessite d'être à l'aise avec les procédures stockées.

    Après c'est à voir en fonction du nombre d'accès en écriture effectués dans ton arbre.

    Salutations

  3. #3
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Merci pour la réponse.

    Je ne connaissais pas le terme "intervallaire", je vais me pencher dessus

    Bonne fin de dimanche

    Olivier

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Slt,

    Connais tu à l'avance le nombre de niveaux maxi de ta hiérarchie ?

    Si oui, il me semble que cela peut être facilement géré par quelques fonctions adaptées.
    Notamment le fait de faire suivre les éléments enfants.

    Je me permets une remarque.
    Sauf erreur de ma part, le "moteur de type x" peut se retrouver dans plusieurs machines et sous ensembles pas la même occasion, non ?
    Si oui, alors tu as un autre soucis sur les bras. Il faut que tu puisses hiérarchiser des éléments qui, au départ, sont indépendant de toute hiérarchie et jamais contraint par elle.
    Dit autrement, il te faut :
    Un fichier Machine
    Un fichier composant
    Un fichier qui permet de lier les composants aux machines
    Un ou plusieurs fichiers qui vont te permettre de hiérarchiser tout ça
    Les solutions les plus simples sont les plus efficaces

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Slt !

    Pour tes questions :

    Connais tu à l'avance le nombre de niveaux maxi de ta hiérarchie ?
    > Non, la hierarchie peut évoluer, on ne peu pas connaitre à l'avance les unités (changement de norme => nouveau traitement intermédiaire)

    Sauf erreur de ma part, le "moteur de type x" peut se retrouver dans plusieurs machines et sous ensembles pas la même occasion, non ?
    > Non, le moteur type est un mauvais exemple de ma part, j'aurais du dire , Moteur N°X , qui sera de type XY.
    > Il y aura le type de moteur, dans une table liée (1<-->n) , pour l'instant c'est vraiment l'objet physique que je veux mettre dans cette liste hiérarchique.
    >Par contre si un composant global ( exple P-5020 => ensemble pompe + moteur) est déplacé dans une autre unité, les enfants doivent suivre et il doit être possible prendre un sous-composant (par exemple le moteur électrique) pour le mettre sur un autre composant global ( déplacement d'un moteur de pompe trop faible par exemple, suite à un changement de mode de production, mais qui serait fonctionnel sur un ventilateur ou autre)


    Si oui, il me semble que cela peut être facilement géré par quelques fonctions adaptées.
    > Je suppose que tu parles de fonctions récursives ? C'est pas trop lourd pour charger toute l'arborescence ?
    >Peut-être que non, mais je n'ai pas d'expérience sur ce type de chargement


    Il y a peut être un truc assez simple a faire ... mais je ne mets pas le doigt dessus , j'ai regardé la représentation intervallaire indiqué ci-dessus, ça a quand même l'air assez compliqué à gérer et je ne voudrais pas être lié aux procédures stockées.

    Merci encore pour ton aide

    Olivier

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 27
    Points : 69
    Points
    69
    Par défaut
    Une manière très simple de gérer cela est d'ajouter une colonne dans le fichier de données de type IDParent (dans le cas ou tous les éléments à hiérarchiser proviennent du même fichier).

    Pour les éléments racine (Service 1, Service x) on mets à Null ou 0 l'IDParent. Tous les autres éléments ont leur IDParent et cela permet de conserver les enfants tel quel lors d'un déplacement d'un élément.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    A la lecture de tes réponses, je penses qu'il doit être possible de gérer tes données dans un seul et unique fichier en fait.
    Comme le dit progxch, tu peux préciser pour chaque élément, l'id du parent s'il existe.

    J'avoue ne jamais avoir pratiqué cette approche mais il se trouve que dans un de mes projets actuel, j'en ai besoin et c'est justement l’orientation que j'ai choisi.
    Le simple fait de déplacer un parent, entraine sans aucune modif, tous les enfants et sans limite de niveaux.
    Le déplacement d'un parent revient juste à modifier l'id de son propre parent, soit vide soit égal à l'id d'un autre élément.
    La seule difficulté selon moi c'est de bien gérer le risque de référence circulaire mais c'est jouable.
    Les solutions les plus simples sont les plus efficaces

  8. #8
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Hello,

    merci pour toutes vos réponses.

    je pense que je vais prendre l'option de "ID_Parent", par contre pour afficher dans un arbre ça risque de prendre pas mal de ressources avec une fonction récursive ?

    Olivier

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Cela prendra effectivement un peu plus de temps probablement.

    Mais...
    Tu n'as pas le choix compte tenu du fait que tu ne peux pas prévoir le nombre de niveaux
    Un dispatching dans plusieurs fichiers prendrait aussi du temps
    Avec les machines que nous avons maintenant et dans la mesure où tu ne traites que des données numérique ou alpha, ça devrait booster quand même

    Après, il y a peut être moyen de stocker une espèce d'arborescence pour éviter que ton appli ne la reconstruise à chaque fois.
    Elle serait modifiée à chaque fois que tu apportes une modif à l'organisation de tes données mais uniquement là où il y a modif.
    A étudier
    Les solutions les plus simples sont les plus efficaces

  10. #10
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    OK, merci pour toutes vos réponses !

    Olivier

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/11/2009, 18h50
  2. gestion collection d'objet
    Par ptit frizé dans le forum UML
    Réponses: 7
    Dernier message: 29/05/2008, 08h40
  3. Gestion des tiers (objet)
    Par CUCARACHA dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/02/2008, 14h20
  4. [CRXI] Ordre different du group by avec gestion hierarchique
    Par FO dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/08/2006, 11h56
  5. [ Struts ]Gestion de l'objet session
    Par trax020 dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/08/2005, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo