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

  1. #1
    Membre extrêmement actif
    Question d'analyse ou disons de gestion d'une liaison dangereuse
    Bonjour à toutes et tous,

    Ce n'est pas vraiment propre à Windev, mais comme je développe en Windev, et que je sais qu'il y a des super pros ici, je pense que c'est le bon endroit pour poser ce problème.

    Ma question est simple : Comment feriez-vous, pour décrire une liaison comme suit ?
    J'ai une table de "régions" (T_Regions), qu'importe ce qu'est une région dans ce cas. Une région est définie par un "Nom", un "Type de Région" (lien avec la table "T_TypRegion"), une "Description", une "Carte" (nom du fichier carte) et appartient à un "Monde" (Les "Mondes" sont dans une table "T_Mondes")

    Mais voilà mon problème : Une région peut-être englobée dans une autre région. Une région mère, en quelque sorte. Et c'est là que je coince dans mon analyse. Comment feriez-vous pour avoir cela ? Soit je rajoute dans la table "T_Region" une rubrique "RegionMère" qui pointe sur une autre région, mais je risque d'avoir du mal à faire mes jointures, soit j'ai une table des RégionsFilles (ou des RégionsMeres, ça revient au même). D'après vous ? Quelle solution apporter ?

    Sachant qu'une Région ne peut avoir qu'une Mère, mais plusieurs Filles. Il faut en plus que j'évite qu'une "Fille" soit Mère d'une région qui soit dans ma filiation (boucle infinie)
    Exemple à ne pas avoir : Région1 a Region2 et Région4 comme filles
    Région2 a Région3 et Région7 comme filles
    Région4 a Région9 et Région14 comme filles

    ALERTE : Région3 a Région1 comme fille (Ça, ce n'est pas possible, sinon je boucle à l'infini dans la recherche des filiations de la Région1)

    Voilà, comment faire cela, en évitant les usines à gaz... ?

    Merci d'avance pour vos lumineuses idées

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Membre expert
    Bonjour,

    J'ai eu la problématique lorsqu'il a fallu que je gère des familles de produits, chaque pouvant être mère et/ou fille.
    Donc j'ai opté pour l'ajout d'une rubrique IDParent dans mon ficher Famille.

  3. #3
    Membre chevronné
    Bonjour,
    L'idéal est de passer par 2 liaisons réflexives.

    Un contrôle avant l'ajout de FK_RégionMère (nulle ou pas) avant l'ajout permettra de vérifier si la région à ajouter dans la filiation est éligible
    Il y a peut être plus simple, mais ça tourne

  4. #4
    Membre expert
    A mon avis, un seul idparent est nécessaire.
    Pour tester, il faudra utiliser une fonction récursive.

  5. #5
    Rédacteur/Modérateur

    La rubique 'RegionMere' dans la table Région est la bonne solution.
    Si tu veux te rassurer avec un peu de documentation, je pense que tu peux chercher avec le mot clé 'association Récursive' ou 'association Réflexive'.

    Tu peux éventuellement ajouter une autre colonne 'Level_From_Top' qui t'aidera à éviter les boucles.

    Dans cette colonne Level_From_Top, soit tu t'imposes : Level_From_Top(Fille) = Level_From_Top(Mere)+1 , soit tu t'imposes seulement Level_From_Top(Fille) > Level_From_Top(Mere). Ca doit même pouvoir se gérer par un trigger.
    Et ces 2 options permettent toutes 2 d'éviter des boucles.

    J'ai eu un cas un peu similaire. Disons qu'on avait des régions, des départements et des communes.
    Certaines entités était clairement identifiées comme Régions, comme départements ou comme communes, mais d'autres étaient plus ou moins à cheval sur 2 statuts.

    Et du coup des communes étaient directement rattachées à des régions...
    Avec la contrainte Level_From_Top(Fille) > Level_From_Top(Mere) , ça se passait très bien. La contrainte Level_From_Top(Fille) = Level_From_Top(Mere)+1 aurait été plus problématique dans ce cas.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre extrêmement actif
    He bien merci à tous pour vos réponses rapides et claires. En plus, elles sont sur la même longueur d'ondes, donc pas de doute, c'est la bonne manière de faire.

    Merci encore

    Et bons dév...

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...