Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Relations entre les tables

5 réponses
Avatar
Kolele
Bonsoir à tous,
J'ai des problèmes douloureux dans les jointures !
Dans une application qui gère des stages d'étudiants, j'ai une table
Entreprise, une table Elève, une table StageElève (en relation 1àplusieurs
avec les 2 précédentes, StageElève = côté plusieurs). J'ai aussi une table
ContactEntreprise (en relation 1à plusieurs avec la table Entreprise,
ContactEntreprise = côté plusieurs).
Le problème se pose au niveau de la table ContactEntreprise : il y a
plusieurs contacts dans 1 entreprise (le DG, le DRH, le commercial …). Ces
contacts vont jouer un rôle dans le stage de l'élève. Dans la table
StageElève, il y a un champ ResponsableDeStage et Tuteur ; et je voudrais, au
moment d'affecter un élève dans une entreprise, pouvoir puiser dans les
enregistrements de ContactEntreprise pour désigner responsable et tuteur.

D'un tempérament laborieux, je suis habitué à n'utiliser que des intégrités
référentielles entre les tables de mes applications (avec un champ de type
NuméroAuto et clé primaire côté 1 de la relation). Là, Access me refuse
l'intégrité entre CléContactEntreprise et les 2 champs ResponsableDeStage,
Tuteur.
Dois-je me contenter de relations simples entre ces 3 champs ? N'est-ce pas
dangereux pour les données ? Genre : saisir un tuteur qui n'existe pas dans
les ContactEntreprise ?
Merci de votre aide et bon week-end à tous.
--
Pierre.

5 réponses

Avatar
db
Kolele a écrit :
Bonsoir à tous,
[...]
D'un tempérament laborieux, je suis habitué à n'utiliser que des intégrités
référentielles entre les tables de mes applications (avec un champ de type
NuméroAuto et clé primaire côté 1 de la relation). Là, Access me refuse
l'intégrité entre CléContactEntreprise et les 2 champs ResponsableDeStage,
Tuteur.



Bonsoir,

Dans la fenêtre de relations, vous pouvez ajouter un deuxième
"exemplaire" de votre table ContactEntreprise, avec lequel vous allez
pouvoir mettre en place votre deuxième intégrité référentielle. Et vous
ne pourrez plus saisir un Responsable de stage, ni un tuteur qui
n'existerai(en)t pas dans la table ContactEntreprise.

db
Avatar
Kolele
Bonjour à db et à vous tous,
Compris pour rattacher, dans la fenêtre Relations, le ResponsableDeStage de
la table StageElève à un "deuxième exemplaire" de la table ContactEntreprise.
L'intégrité référentielle est alors garantie. Et je fais pareil pour le
Tuteur, avec un "troisième exemplaire".
Mon objectif est de remplir la Table StageElève, en affectant à chaque élève
une entreprise d'accueil (table Entreprise), un responsable de stage et un
tuteur (Table ContactEntreprise). J'ai un formulaire qui puise le nom de
l'élève, avec une zone de liste modifiable bien pratique. Et j'ai un
sous-formulaire enchâssé dans le formulaire pour les données Entreprise.
Ensuite, je cale. Chaque ligne du sous-formulaire doit contenir le Nom de
l'entreprise (zone de liste qui sélectionne le NomEntreprise et stocke la
CléEntreprise dans StageElève). Si je m'arrête là, la requête fonctionne.
Après, quel champ de quelle table reliée comment à StageElève dois-je
sélectionner pour obtenir mon ResponsableDeStage et mon Tuteur ? Ça fait trop
de question à la fois, tout ça.
Merci pour le coup de pouce.
Nb : ma maîtrise de Access a fait un bond grâce aux conseils trouvés sur ce
forum.
--
Pierre.
Avatar
db
Kolele a écrit :
Bonjour à db et à vous tous,
Compris pour rattacher, dans la fenêtre Relations, le ResponsableDeStage de
la table StageElève à un "deuxième exemplaire" de la table ContactEntreprise.
L'intégrité référentielle est alors garantie. Et je fais pareil pour le
Tuteur, avec un "troisième exemplaire".
Mon objectif est de remplir la Table StageElève, en affectant à chaque élève
une entreprise d'accueil (table Entreprise), un responsable de stage et un
tuteur (Table ContactEntreprise). J'ai un formulaire qui puise le nom de
l'élève, avec une zone de liste modifiable bien pratique. Et j'ai un
sous-formulaire enchâssé dans le formulaire pour les données Entreprise.
Ensuite, je cale. Chaque ligne du sous-formulaire doit contenir le Nom de
l'entreprise (zone de liste qui sélectionne le NomEntreprise et stocke la
CléEntreprise dans StageElève). Si je m'arrête là, la requête fonctionne.
Après, quel champ de quelle table reliée comment à StageElève dois-je
sélectionner pour obtenir mon ResponsableDeStage et mon Tuteur ? Ça fait trop
de question à la fois, tout ça.



Bonsoir,

Difficile de répondre sans connaître la structure de la base. Je suppose
que votre table StageElève contient au moins 5 champs : idStage,
idEleve, idEntreprise, idResponsable, idTuteur. Je suppose aussi que la
même entreprise peut avoir plusieurs responsables de stage, plusieurs
tuteurs. Le formulaire que vous évoquez doit donc se baser sur cette
table StageElève. Et il n'y a pas de nécessité d'avoir un
sous-formulaire : une liste déroulante pour les élèves, une liste
déroulante pour les entreprises, une liste déroulante pour les
responsables et une dernière pour les tuteurs. Les listes des
responsables et de tuteurs seront filtrées en fonction de sélection de
l'entreprise.
Ou alors je n'ai pas tout compris ?

db
Avatar
Kolele
Bonjour,
Si si, c'est exactement ce que je veux. Rapide description de la structure.
4 tables sont en relation : la table Entreprise (idEntreprise, raison
sociale), Elève (idEléve, NomPrénom), StageElève (idStageElève, idElève,
idEntreprise, idResponsable et idTuteur) et la table ContactEntreprise
(idContact, Nomprénom, coord, etc.).
Relation 1 (table Entreprise, Elève) à plusieurs (StageElève) sur le champ
idEntreprise, idElève. Relation 1 (Entreprise) à plusieurs
(ContactEntreprise) sur le champ idEntreprise.
Quelle relation entre ContactEntreprise et StageElève, sachant que
StageElève a en amont une relation avec la table Entreprise, ayant elle même
une relation avec ContactEntreprise ? J'ai beaucoup de mal à gérer le
triolisme ! Les bases que je créé d'habitude ont une structure en "arête de
poisson" : les relations 1-à-plusieurs vont dans le même sens. Ici,
Entreprise est le côté 1 à la fois de StageElève et de ContactEntreprise,
d'où mon impossibilité de penser une relation directe entre ces deux
dernières tables.

Mon formulaire est basé sur une requête qui reprend les champs des tables
StageElève, Elève, Entreprise, ContactEntreprise. Ensuite je remplace
certains champs par des listes déroulantes. Par ex, une zone de liste
modifiable qui reprend idElève, NomElève de la table Elève et stocke la
valeur de idElève dans le champ idElève de StageElève.
Mon souci : idResponsable et idTuteur (StageElève) doivent récupérer les
valeurs de idContactEntreprise (ContactEntreprise) et afficher les noms de
ces contacts dans le formulaire.

A noter, les relations avec le "deuxième" exemplaire d'une table (pour avoir
l'intégrité référentielle), dans la fenêtre relations, disparaissent dès que
je ferme la base.
Merci de votre aide précieuse.
Avatar
Kolele
db : suivant vos conseils, je cherche maintenant à filtrer la liste
déroulante des responsables de stage. Mais j'ai posté un autre sujet,
intitulé "Filtrer une liste déroulante en fonction d'un autre contrôle du
formulaire"
--
Pierre.