Fonctionnement relation entre les tables

Étiquetté : , ,

  • Fonctionnement relation entre les tables

    Posté par Oliviersg95 sur 11 avril 2023 à 13h36

    Bonjour à toutes et tous,

    Je me lance tout juste dans le mis code no code et le monde de DATAVERSE en essayant de créer une application me permettant de gérer l’achat de matériel et de location de ce dernier.

    J’avoue ne pas arriver à comprendre comment fonctionne les relations dans DATAVERSE.

    Si je prends ma table client et ma table parc, que je veux les lier entre elles je vais créer une relation N – 1 . Mais dans ce cas sur quelle colonne se fait la recherche et quelle colonne dois je désigner lorsque je crée la relation.

    Exemple : j’ai dans ma table client un id client (PK) un nom, un code client, une adresse

    Dans ma table parc je vais avoir un idProduit (PK), un nom produit, un code produit, un code client (identique à celui de la table client), un prix de location et une quantité)

    Merci de votre aide.

    PostID=yJBamrxKphKJa6Y

    Oliviersg95 a répondu Il y a 12 mois 1 Membre · 8 Réponses
  • 8 Réponses
  • R3dKap

    Membre
    11 avril 2023 à 15h25

    Bonjour Oliviersg95,

    Je suis pas encore un expert sur Dataverse mais voici les bases sur les relations…

    Si tu veux créer une relation 1-1 entre 2 tables, il te suffit de créer une nouvelle colonne de type Rechercher et où tu choisis la table liée. Et c’est tout… Le système stockera dans ta colonne la PK de ta table liée. Pas besoin de choisir une colonne dans la table liée (comme dans SharePoint). Et ensuite tu peux accéder aux données de ta table cible simplement avec un .<colonne> après le nom de ta colonne de recherche dans ta table source.

    Ensuite, si tu veux créer des relations 1-N, N-1 ou N-N, là tu passes par l’onglet Relations de l’une de tes 2 tables et tu crées une nouvelle relation Une-à-plusieurs, Plusieurs-à-une ou Plusieurs-à-plusieurs.

    Dans le cas de la relation 1-N, le système ajoutera une colonne Rechercher dans la table cible. Dans le cas de la relation N-1, le système ajoutera une colonne de recherche dans ta table source.

    Et le cas de la relation N-N est particulier : le système crée une table masquée impossible à interroger comme une table classique autrement que par Power Automate (et encore c’est pas trivial). Du coup, pour les relations N-N je préfère créer moi-même ma propre table dans laquelle je mets les PK des chacune des 2 tables concernées.

    Par exemple, pour créer une relation N-N entre Client et Parc, je créerai une table Location avec 2 colonnes :

    • une colonne de recherche Client qui pointe vers la table Client

    • une colonne de recherche Produit qui pointe vers la table Parc

    Si tu optes pour la relation N-N “native”, il te faudra utiliser les fonctions Relate() et Unrelate() pour faire et défaire les liens entre tes clients et tes produits.

    Si tu optes pour ta propre table Location, il te faudra gérer son contenu à l’aide des fonctions habituelles de gestion de source de données : Patch(), Remove(), …

    Voilà, j’espère que je n’ai pas dis de bêtise. Je laisse DavidZed ou autre spécialiste Dataverse confirmer ou infirmer…

    CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

    • Oliviersg95

      Membre
      11 avril 2023 à 15h39

      Merci R3dKap,

      Ce qui me gêne c’est le « c’est le système qui se charge de faire le lien »

      Comment lorsque je vais ajouter dans mon apps un matériel dans mon parc et que je vais lui affecter un code client, il va pouvoir faire le lien avec ma table client. Et pouvoir me ressortir tous les matériels du parc affecté à ce client ?

      C’est le système qui se charge du lien ? 😀

      SubCommentID=vFpSMkhJALg1n3E, CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

    • Oliviersg95

      Membre
      11 avril 2023 à 16h38

      Merci pour ton retour rapide R3dKap ,

      Je vais essayer les 2 et voir ce qui est le plus pratique 😃.

      SubCommentID=33vehUzPpEOTPYl, CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

    • R3dKap

      Membre
      11 avril 2023 à 16h44

      Oliviersg95 j’ai supprimé ma réponse précédente qui était aussi inexacte (le week-end Pascal est passé par là 😅) et j’ai rectifié mon post d’origine ci-dessus. Je t’invite à le relire attentivement pour bien saisir comment ça fonctionne.

      Sinon, y’a toujours la doc officielle :

      SubCommentID=IchEAomTXBS7AiK, CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

    • Oliviersg95

      Membre
      11 avril 2023 à 19h35

      Bien lu. Merci.

      la colonne de recherche qui est créée, c’est celle pour laquelle on nous demande de lui donner un nom ?

      Mais elle fait une recherche sur quelle colonne de la table cible ? Ou bien scanne t elle toute la table pour trouver une correspondance avec une des infos de la ligne en création ?

      (Je ne sais pas si je suis très clair 😅… peut-être aussi le WE Pascal 😀)

      SubCommentID=j8OzKX4wr728bUu, CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

    • R3dKap

      Membre
      12 avril 2023 à 9h21

      Oliviersg95 fait simple : pour créer une relation 1:N ou N:1 fais-le directement dans la table concernée en créant une nouvelle colonne de type Rechercher.

      Par exemple, dans ton cas, un produit ne pouvant être en location que par un seul client à la fois à un instant T, il te suffit de créer dans ta table Parc une colonne de type Rechercher que tu peux appeler tout simplement Client, ou encore mieux Loué par (comme ça c’est bien parlant).
      Lors de la création de cette colonne, après avoir choisi le type Rechercher, choisi simplement la table Parc comme Table associée. Donne ensuite un nom technique à ta colonne dans Nom du schéma puis à ta relation dans Nom de la relation.

      Et c’est tout… Est-ce que cela répond à ton besoin ? Sinon n’hésite pas à nous décrire ta cible en termes métier déjà pour commencer afin que l’on comprenne bien ce que tu veux faire au final… 😉

      SubCommentID=gOkxzkxlGheLjRN, CommentID=DGPcfoXYdZMPB5l, PostID=yJBamrxKphKJa6Y

  • DavidZed

    Membre
    11 avril 2023 à 19h45

    Hello Oliviersg95 ,

    Pour les relations dans Dataverse :

    • 1:1 (un à un), la relation la plus basique : et pourtant elle n’existe tout simplement pas dans Dataverse !

      • Donc soit on utilise une 1:N à la place

      • Soit on ajoute de nouvelles colonnes dans la même table

    • 1:N (Un à plusieurs) / N:1 (Plusieurs à un) : On peut les créer :

      • Soit par le menu des relations à partir de la table N ou de la table 1

      • Soit en créant une colonne de type “Recherche” / “Lookup” dans la table “N”

      • Un arbre peut avoir plusieurs branches, mais une branche ne peut avoir qu’un arbre => je crée une colonne “Recherche” dans la table “Branche” qui pointera vers la table “Arbre”

    • N:N Native, Plusieurs à plusieurs, on les crée uniquement via le menu relations

      • Optimisé pour les application “Model-driven”

      • Plus délicat à utiliser dans les applications Canvas (voir le post de R3dKap )

    • Et enfin la relation N:N “Custom”, qui consiste à créer, depuis une table qui servira de jonction, deux colonnes de type recherche (ou 2 relations N:1) vers les deux tables à lier. L’avantage, c’est que bien souvent, cette table intermédiaire n’est pas forcément une donnée virtuelle, mais peut faire référence à une entité du projet.

      • L’exemple cité par R3dKap l’illustre parfaitement (Client / location / parc).

      • L’exercice consiste souvent à trouver le dénominateur comun entre deux tables pour déterminer la table intermédiaire. Un exemple que j’utilise souvent c’est celui d’une école :

    Une école a plusieurs salles de classe, plusieurs professeurs, et plusieurs élèves. On va avoir plusieurs relation N:N de ces trois tables entre elles :
    Les élèves ont plusieurs professeurs, les professeurs ont plusieurs élèves,
    Il y a plusieurs élèves par salle de classe, les élèves vont dans plusieurs salles de classe
    Les professeurs donnent des cours dans plusieurs salles de classes, les salles de classe accueillent plusieurs professeurs

    Ici le dénominateur commun entre professeurs et salles de classe, sera le cours, cette nouvelle table aura une relation N:1 avec les deux premières :
    Un cours ne peut avoir lieu que dans une salle de classe, avec un seul professeur
    Une salle de classe accueille de nombreux cours, un professeur donne plusieurs cours tout au long de l’année

    Mais nous aurons toujours une liaison N:N des élèves avec les cours : un cours compte plusieurs élèves et un élève suivra plusieurs cours, il faut donc de nouveau trouver un dénominateur commun : l’emploi du temps (ou feuille de présence) : Chaque enregistrement dans l’emploi du temps va faire le lien entre un élève et un cours, et par extension, entre un élève et une salle et un professeur.

    Comme tu peux le voir ci-dessus, les liaisons Dataverse, offrent l’énorme avantage de pouvoir accéder à toutes les colonnes de l’enregistrement lié :

    • pour un enregistrement dans “Emploi du temps”, on peut obtenir la matière concernée en suivant le cheminement : ‘Emploi du temps’.Cours.Professeur.Matière (on ne peut pas remonter plus de 2 niveaux à la fois par contre)

    Contrairement à Sharepoint où l’on ne va pouvoir accéder directement qu’a une seule colonne (en plus de l’ID)

    CommentID=s3fT8cEMdgf2YEC, PostID=yJBamrxKphKJa6Y

  • Oliviersg95

    Membre
    12 avril 2023 à 14h52

    Merci pour vos retours DavidZed, R3dKap.
    Je vais donc juste créer les relations sans me soucier sur quelle colonne se fait la recherche. C’était qq chose qui m’interrogeait, mais visiblement cela ne joue pas dans DATAVERSE.

    Merci pour l’aide je n’hésiterai pas à revenir.

    C’est top 👍 d’avoir un Forum sur la PP en français !

    Je vous dirai selon l’avancement de mes sujets… 😀

    CommentID=VMRJRPfchMlHcxQ, PostID=yJBamrxKphKJa6Y

Connectez-vous pour répondre.