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

Modélisation Discussion :

Relation "miroir" dans une table de jonction [AC-2013]


Sujet :

Modélisation

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut Relation "miroir" dans une table de jonction
    Bonjour à tous.

    Je cherche à faire un type de relation que j'appelle "miroir".
    C'est simple à schématiser : imaginons un formulaire de personnages historiques (Napoléon, Louis XIV, etc.) prenant sa source dans une table (champs "ID_personnage" et "nom"). Je voudrais faire apparaître dans un sous-formulaire les personnages qui ont rencontré le personnage actif.
    J'ai essayé en créant une table de jonction avec trois champs "ID_jonction", "personnage_1" et "personnage_2" et son sous-formulaire associé. Dans les relations, les deux champs "personnage_..." sont reliés au champ "ID_personnage" de la table principale.
    Je fais mon formulaire principal, j'inclue le sous-formulaire et le relie avec les champs ID_personnage = personnage_1.
    Ça marche très bien : par exemple je crée Louis XIV, Napoléon, Molière, Clemenceau, La Fontaine, Murat, etc. Je vais sur le formulaire, je regarde Louis XIV et je renseigne son sous-formulaire "a rencontré" avec "Molière" et "La Fontaine", et ainsi de suite.
    Oui mais voilà : ensuite, quand je consulte Molière, le sous-formulaire "a rencontré" est vide alors que je voudrais qu'il affiche "Louis XIV" et "La Fontaine", en toute logique.

    Quelle architecture adopter pour cela ?

    J'ai bien pensé à faire une routine VBA qui, à chaque nouvel enregistrement dans la table de jonction, crée automatiquement un enregistrement supplémentaire "miroir" avec les mêmes personnages dans l'autre sens, mais c'est fastidieux, cela double les enregistrements, alourdit les processus et, finalement, ne me plaît pas.

    Existe-t-il une solution ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Pourquoi ne pas ajouter un champ "Siecle" ou "Epoque" à la table "T_Personnage".

    Par exemple on aurait :

    IdPersonnage NomPersonnage Siecle
    1 Louis XIV 17ème siècle
    2 Molière 17ème siècle
    3 La Fontaine 17ème siècle
    ... ... ...

    Ce qui permet ensuite de regrouper les personnage par siècle.

    Ensuite, depuis le formulaire principal, on pourrait juste consulter les contemporains dans un sous-formulaire relié sur le champ Siècle.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut
    Merci de cette idée. C'est vrai que je n'avais pas pensé à un champ tiers qui pourrait faire le lien entre deux personnages.
    Malheureusement c'est inapplicable dans mon cas : j'ai plusieurs milliers d'enregistrements et un lien par siècle n'est pas assez fin. Un lien par année n'est pas possible non plus : j'ai plusieurs personnes dont les dates sont inconnues (issues d'archives manuscrites anciennes) et dont on sait juste qu'elles ont cotoyé d'autres personnes. Seul un lien personne à personne me semble envisageable...
    D'autres idées ?

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Ce champ supplémentaire pourrait s'appeler groupe :

    par exemple :

    IdPersonnage NomPersonnage Groupe
    1 Louis XIV 1
    2 Molière 1
    3 La Fontaine 1
    ... ... ...

    Ici Groupe "1" pour Groupe de "Louis XIV".

    C'est vous qui définissez le groupe.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut
    Merci de cette alternative.
    Dans mon cas, elle me semble trop restrictive puisqu'une personne a pu côtoyé deux autres personnes qui elles-mêmes ne se sont pas connues
    Je fais faire un petit edit dans mon premier message en remplaçant "contemporain de" par "a rencontré", qui est plus proche de mes besoins.
    J'espérais que c'était possible de modéliser cette relation par une sorte de relation récursive ou réflexive...
    En tout cas merci de votre aide.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Remplacez le champ supplémentaire "Groupe", par "lien".

    Le champ lien contiendrait par exemple la valeur de idpersonnage.

    Dans notre exemple lien=1 qui est l'id. de louis XIV.

    Vous auriez alors une relation reflexive :
    Idpersonnage->lien.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut
    Est-il possible de mettre plusieurs liens avec cette solution ?

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    C'est un peu comme pour une classification des especes avec un acsendant relié à plusieurs descendants. Mais c'est pas tres souple contrairement à la 1ere solution.
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut
    Bonjour.
    Si j'ai bien compris, le champs "lien" renverrai à une table annexe où l'on enregistrerait les n° de lien et les personnes qui y appartiennent ?
    Mais pour l'ergonomie, je ne trouve pas cela pratique : l'utilisateur ne pourra voir directement quels personnages ont côtoyé tels autres, à moins de créer un formulaire supplémentaire "lien"... Et qu'en serait-il de la saisie d'information ? Il faudrait aussi passer par un autre formulaire pour saisir les liens d'un personnage ?
    Je pense que je vais rester sur ma petite routine VBA qui crée automatiquement une deuxième ligne inversée dans une table de jonction "personnage_1" / "personnage_2" s'il n'existe pas de modélisation simple pour mon problème.
    Merci beaucoup.

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Si j'ai bien compris, le champs "lien" renverrai à une table annexe où l'on enregistrerait les n° de lien et les personnes qui y appartiennent ?
    C'est une relation réflexive, donc le champ Lien est en relation avec IdPersonnage de la même table. Même je suis d'accord, c'est vraiment pas souple pour la mise en place de cette solution.

    Je pense que je vais rester sur ma petite routine VBA qui crée automatiquement une deuxième ligne inversée dans une table de jonction "personnage_1" / "personnage_2" s'il n'existe pas de modélisation simple pour mon problème.
    Plutôt que de créer une deuxième ligne inversée à chaque fois, pourquoi ne pas le faire dans requête union :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT personnage_1, personnage_2
    FROM T_Jonction
    UNION ALL
    SELECT personnage_2, personnage_1
    FROM T_Jonction

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur (improvisé) de base de données
    Inscrit en
    Décembre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur (improvisé) de base de données
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2014
    Messages : 102
    Points : 72
    Points
    72
    Par défaut
    Oh l'élégante solution que voilà !
    C'est parfait, c'est exactement ce que je cherchais, merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. QGIS : lenteur pour afficher les listes des vues dans "Ajouter une table PostGIS"
    Par fafa63 dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/07/2014, 19h04
  2. [AC-2003] Requête sans doublon ? dans une table de jonction ?
    Par artus59 dans le forum Modélisation
    Réponses: 3
    Dernier message: 04/07/2013, 22h35
  3. Réponses: 3
    Dernier message: 30/09/2009, 10h00
  4. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  5. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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