Relation 1 à 1 non souhaitée

Dans la fenêtre Relations, j’essaie d’établir une relation « 1 à plusieurs » entre deux tables, et Access place systématiquement une relation « 1 à 1« . Pourquoi, donc ?

Solution

Dans la table côté « Plusieurs », vérifiez le champ servant de liaison (la clef étrangère). Il comporte actuellement un index sans doublons, ce qui est incorrect dans une majorité des cas. Remplacez cet index par un index avec doublons (conseillé) ou par aucun index.

Si on y réfléchit deux secondes, le problème du départ est logique : si les doublons sont interdits sur le champ de liaison de la table côté « Plusieurs », toutes les valeurs de ce champ sont différentes. Or c’est le cas aussi des enregistrements de la table côté « 1 ». Ce qui fait qu’on ne peut relier les lignes de tables que une à une.

Exemple

La relation « 1 à plusieurs » ci-dessous se fait correctement parce que…

  • la table tbl Villes est située du côté « 1 » de la relation (1 ville peut rassembler plusieurs clients) ;
  • la table tbl Clients est donc située du côté « Plusieurs » de la relation ;
  • le champ Code Ville de la table tbl Villes est clef primaire (donc nécessairement indexé sans doublons) ;
  • le champ Code Ville de la table tbl Clients sert de jonction avec la table des villes. C’est une clef étrangère (généralement indexée avec doublons). Si ce champ était indexé sans doublons, vous forceriez une relation 1:1 entre les deux tables.

Info
Le phénomène se produit souvent si vous avez eu la mauvaise idée de copier/coller la clef primaire de la table « 1 » pour en faire la clef étrangère de la table « Plusieurs ». Une clef primaire étant toujours indexée sans doublons, vous déplacez aussi cette propriété.

Vous aimerez aussi...

3 réponses

  1. Blaise dit :

    La table est visiblement mal foutue : certainement pas
    «
    T_Matière: N°Matiere; Français; Math; Physique; Anglais; Svt, phylosophie……
    »
    Mais
    T_Matière: N°Matiere; Matiere_Libelle

    Et puis cette table sera source de votre liste déroulante.

  2. Hervé Inisan dit :

    fanignoro > Vous êtes plusieurs (de la même école, visiblement ;-)) à poser strictement les mêmes questions sur le blog, alors que vos questions s’adressent plutôt au forum.

    Merci…

    1. De consulter cet article sur les règles du blog.
    2. De regarder les commentaires de cette page du blog.
    3. De vous passer le message les uns les autres.

    Je devrai malheureusement bloquer les messages du même type à l’avenir, s’ils sont hors charte. Merci de votre compréhension.

  3. fanignoro dit :

    Salut à tous
    Je crève sur un exercice depuis une 2 mois mais malheureusement je constat que le bout du tunnel est encore loin.
    Il s’agit de créer une application sur Access qui doit gérer la vie d’un établissement scolaire.
    Je vous donne un aperçu de tables créer

    T_Eleves: N°Matricule ; #n°parents, #n°evaluation, NomEleve ; Prenom ; Datede Naissance…
    T_Parents: N°Parent, Nom, prenom, fonction, adressepostal, tel, e-mail…..
    T_Matière: N°Matiere; Français; Math; Physique; Anglais; Svt, phylosophie……
    T_Evaluation: #n°matiere, N° evaluation, DateEvaluation………..
    T_DetailEvaluation: #n° evaluation, #n°matiere Type Evaluation(Devoirsurveillé, Interrogationecrite); Note, Cœfficient.
    T_DetailTrimestre : #n°classe, #n°Trimestre; CoeficientTrimestre;
    T_Trimestre:N°Trimestre, Datedebut rimestre; DateFin Trimestre
    T_Classe: N°Classe; 6è; 5è; 4è, 3eme, 2nd, 1ere, Tle, Description, Cycle,
    T_DecisionConseilClasse: N°Decision, redouble, Admis, Exclu
    T_Bulletin: #n°Decision, #n°conseil
    T_ConseildeDiscipline: N°Conseil, absence, retard, sanction, distinction……
    Est-ce possible de créer un champ nomdematiere avec une liste déroulente, anglais, svt, physique, mathematique etc… ?

    Je besoin d’une aide pour l’analyse et la modélisation
    Merci à tous
    COORDIALEMENT

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *