Relations

Créer des relations dans Access

Get comfortable !
J’insiste à ce que vous soyez à l’aise avant d’aborder cette partie sur les relations !
Ce n’est pas parce que c’est difficile. Pas du tout.  Mais par ce que la définition correcte des relations entre les tables conditionne grandement la réussite de tout votre projet de BD.

Vous le savez maintenant, Access est un SGBDR, c’est-à-dire un système de gestion de bases de données relationnelles. Les relations en représentent donc une composante essentielle.

Dans Access, on appelle relation toute liaison entre deux tables.

Mais pourquoi lier les tables ?

Comme vous le savez, Access stocke les données dans des tables distinctes. Cependant, pour que le logiciel puisse répondre à nos besoins, on doit lui dire comment il procédera pour rassembler tous ces données d’une manière logique et cohérente.

On doit lui dire quelle information dans la première table correspond à quelle information dans la 2ème table. Ou encore, quelle information dans la 2ème table dépend de quelle information dans la 1ère table.
Par exemple ; une note dans la table NoteTb dépend de quel élève de la table ElevesTb et de quelle évaluation de la table EvaluationTb ?
Vous serez totalement convaincu de l’importance cruciale des relations lorsqu’on va créer les autres objets de la BD (des formulaires, des requêtes et des Etats)

Comment faire des relations entre deux tables ?

La relation entre 2 tables se fait à l’aide de deux champs, un champ de la première table qu’on relie à un autre champ de la deuxième table :

  • D’un côté,  et d’habitude c’est la clé primaire de la première table qui sert de départ de la relation(ou un autre champ qui doit avoir la propriété indexé sur Oui-sans doublon (revoir le cours sur les tables).
  • De l’autre côté, un champ de la deuxième table qu’on appelle clé étrangère.

Néanmoins, Cela n’est réalisable que lorsque les 2 champs des 2 tables soient du même type ; vous devinez alors qu’on ne peut relier un champ de type numérique à un autre de type texte par exemple.
En revanche, lorsque le champ et de type texte. Il faut que les deux champs soit de même taille.

Pour être plus concret, voilà un exemple de relation que vous devez créer :

créer relation 1

Comme vous l’avez constaté :
Pour être reliées, deux tables doivent disposer d’un champ ayant des données communes C-à-d identiques.
Toutefois, Les noms des champs de liaison peuvent être différents dans les deux tables, mais leurs caractéristiques et leurs contenus doivent être identiques

Avant de passer à l’action, nous allons étudier d’abords les types de relations qui existent

Typologie des relations :

Dans le domaine des BD, on parle généralement de trois types de relations :

  1. Relation de un à un : Chaque enregistrement de la première table est lié à un et seulement un enregistrement de la deuxième tableExemple : une table ElevesTb liée à une table AdressesTb. Chaque élève (première table) possède une seule adresse (deuxième table).
  2. Relation de un à plusieurs : Chaque enregistrement de la première table est lié à plusieurs enregistrements de la deuxième table. Prenons l’exemple ci-dessus, c’est une relation typique de un à plusieurs ; une classe peut contenir plusieurs élèves, le contraire n’est pas vrai : un élève ne peut être en même temps dans plusieurs classes !
  3. Relation de plusieurs à plusieurs : Plusieurs enregistrements de la première table sont liés à plusieurs enregistrements de la deuxième tableExemple : une table Clients avec une table Produits. Plusieurs clients peuvent commander plusieurs produits, et vice versa, plusieurs produits peuvent être commandés par plusieurs clients.
    Cependant, ce type de relation n’est pas directement réalisable ! il faut créer une autre table CommandesTb (dite intermédiaire) pour faire deux relations de un à plusieurs.

Les malins me diront : pourquoi une relation de un à un puisque chaque enregistrement de la première table est lié à un et seulement un enregistrement de la deuxième table ?
Pourquoi ne pas réunir les données des deux tables dans une seule alors ?

Vous avez tout à fait raison !

En effet, ce type de relations est utilisé dans des situations spécifiques et rares :

  • le cas d’une table gigantesque (comporte beaucoup de champs) qu’on décide de scinder en deux tables pour plus de commodité,
  • une table avec un champ de type texte long (ou mémo dans les versions précédentes d’Access) par exemple; une description de produit qui est très longue.
  • Ou bien une table avec des informations qui ne concernent pas tous les enregistrements de la première tables (celle des élèves).
  • Ou encore, une table temporaire, souvent utilisée dans le domaine du commerce, une table de promotion qui ne concerne que des produits particuliers.
  • Ou encore pour des raisons de sécurité !

Pour le troisième type de relationsPlusieurs à plusieurs : On ne peut pas le réaliser directement dans une BD, comme on l’a déjà signalé. En pratique, on procède à sa division en deux relations de un à plusieurs à l’aide d’une table intermédiaire.

En plus Access ne permet que les deux premiers types de relations, à savoir : la relation de un à un et la relation de un à plusieurs.

Maintenant, passons à la pratique !

Vous pouvez ouvrir Access pour savoir comment créer des relations entre les tables

 

Créer une relation dans Access

Bonne nouvelle La création de relations dans Access se fait à l’aide d’un mode graphique. Ça n’a jamais été aussi simple dans le monde des BD, vous n’avez rien à inventer. Juste un simple tour de main.

Note on va se servir d’une base exemple baptisée « relations-1 » pour ce cours et que vous pouvez télécharger ici Relation1.

C’est le même fichier sur lequel on a travaillé et dans lequel j’ai ajouté d’autres tables. 

Une fois la base de données « relations-1 » téléchargée, double cliquez dessus pour l’ouvrir. Nous allons créer une relation de un à plusieurs entre les 2 tables ClassesTb et ElevesTb.

Attention : Si un message de sécurité apparaît comme celui de la figure dessous, cliquez sur Activer le contenu. C’est une manière de vous protéger lorsque le fichier provient d’une source non fiable.
avertissement sécurité

Tout d’abord, veillez à ce qu’aucune table ne soit ouverte. Vous ne pouvez pas créer des relations sur des tables ouvertes ou encore si un objet utilisant ces tables est ouvert (un formulaire par exemple).

  1. Allez sur le Ruban d’Access, et activez l’onglet « Outils de base de données » 
  2. Cliquez sur le bouton Relations comme comme dans la figure.
  3. A l’aide du bouton droit de votre souris, cliquez n’importe où sur la fenêtre qui s’affiche. Et choisissez Afficher la table dans le menu contextuel

créer relation access

Note ; Si la fenêtre Relations contient déjà des tables, vous pouvez les supprimer sans crainte. Elles seront supprimées juste de la fenêtre Relation et non pas de la BD.
Pour cela, cliquez sur la table concernée, puis sur la touche « Supp » du clavier. Ou bien, utilisez le bouton droit sur la table puis choisissez Masquer la table.

5. Dans la boite de dialogue (figure ci-dessous), sélectionnez la table qui vous concerne ClassesTb, puis cliquez sur le bouton AjouterFaite de même pour la table ElevesTb.

Astuce : Vous pouvez afficher plusieurs tables en même temps : cliquez sur la première table, en maintenant la touche Ctrl du clavier, cliquez sur la deuxième, puis sur Ajouter.
Vous pouvez également effectuer un double clic sur la table souhaitée pour l’ajouter.
Faites attention, n’ajouter pas une table deux fois, ça pourra vous créer des ennuis !

créer relation access 3

Lorsque toutes les deux tables ont été ajoutées, cliquez sur le bouton Fermer de la boîte de dialogue Afficher la table.

Maintenant, pour créer la relation proprement dite :

  1. Cliquez sur le champ de CodClasse de la table ClassesTB. maintenez le bouton de la souris enfoncé,
  2. et glissez vers le champ Classe de la table ElevesTb puis relâchez.
  3. La boite de dialogue Modifier des relations apparaît comme suit. Cochez la case Appliquer l’intégrité référentielle, puis, cliquez sur le bouton Créer.
    Vous constatez aussi qu’Access a deviné le type de relation, regardez en bas de la fenêtre. Type de relation : un-à-plusieurs,
    C’est magique, non ?

créer relation access 4

C’est tout. Votre relation est bien créée

Mais c’est quoi l’intégrité référentielle ?

 L’intégrité référentielle 

Ne vous laisser pas décourager par cette nomination qui pourrait vous paraître étrange à premier abord. Alors que c’est une fonction extrêmement importante à l’aide de laquelle Access permet de contrôler la validité et la compatibilité des données saisies.

Je m’explique : si vous tentez d’ajouter un nouvel enregistrement (élève) à la table ElevesTb avec une classe « 7ème A » par exemple, Access refuse en vous disant que cette classe n’existe pas dans la table ClassesTb.
Et encore si vous tentez de supprimer un enregistrement (une classe) de la table ClassesTbAccess vous empêche en vous disant que la classe que vous voulez supprimer est en relation avec des enregistrements (des élèves) de la table ElevesTb.

Et ça bien sûr permet d’assurer l’intégrité et la cohérence des données saisies.

Pour appliquer l’intégrité référentielle, il suffit de cocher la case correspondante dans la boite de dialogue « modifier les relations » (vue en haut).
Pour réafficher cette boite, double cliquez simplement sur la ligne symbolisant la jointure entre les deux tables.

Vous pouvez aussi choisir de :

  • Mettre à jour en cascade les champs correspondants : c’est-à-dire lorsque vous modifiez un enregistrement dans la table ClassesTb, la modification est répercutée automatiquement sur les enregistrements correspondants dans la table ElevesTb
  • Effacer en cascade les enregistrements correspondants : c’est-à-dire lorsque vous supprimer un enregistrement de la table ClassesTb, tous les enregistrements correspondants de la table ElevesTb seront supprimés
    Faites alors attention en acceptant cette dernière règle !

Remarquez aussi que lorsque vous appliquez l’intégrité référentielle, vous pouvez voir apparaitre les signes (1 et ) sur les deux côtés de la relation.

Attention : 

Pour pouvoir appliquer l’intégrité référentielle, il faut absolument que les deux champs des deux tables soit du :

  • Même type de champ : le type texte avec le type texte, numérique avec numérique, date avec date etc. Seule exception : si la clé primaire est de type NuméroAuto, la clé étrangère doit être de type Numérique.
  • Même longueur pour le type de champ texte : un champ de 50 caractères avec un champ de 50 caractères, dans la plupart des cas vous utilisez le type texte court donc Access lui attribue une taille de 255 caractères par défaut
  • Même type d’information : il se peut que 2 champs soient du même type, numérique par exemple. cependant le premier concerne le code de l’élève et le deuxième le code de la classe ; ils ne désignent pas la même chose.
  • Concordance, équivalence entre les tables liées : Access vérifie que les valeurs du champ du côté plusieurs existe bien dans la table du côté 1.  la liaison entre les tables ClassesTb et ElevesTb en est un bon exemple : ces 2 tables sont liées à l’aide du champ CodClasse, donc on ne peut pas avoir des élèves dans la table ElevesTb qui ont des Codclasse (appartenant à des classes) qui n’existent pas dans la tables ClassesTB 
  • Pas de dédoublement de clé primaire : Si vous avez opté pour un autre champ que la clé primaire pour créer votre relation, Access vérifie s’il n’y a pas de doublons dans la table et refuse ainsi de créer la relation.

Remarque :

une fois les relations sont définies, il est impossible de modifier ou de supprimer les champs qui entrent en jeu dans ces relations sans suppression de ces dernières. Donc pour supprimer les champs qui entrent en relation, supprimer d’abords les relations. Voyez en bas comment supprimer une relation.

 Supprimer une relation :

Dans ce qui a précédé, on a vu comment modifier une relation en double cliquant sur la ligne qui symbolise la jointure entre les deux tables.

Pour supprimer une relation, cliquez une fois sur la ligne de jointure et tapez sur la touche Sup du clavier. Puis confirmer par Oui si vous êtes sûr de ce vous faites


Ce que vous devez retenir !

Les relations dans Microsoft Access constituent une fonctionnalité très puissante qui permet d’assurer l’intégrité et la cohérence des données contenues dans les tables de votre base de données.
Access vous permet de créer des relations graphiquement à l’aide d’un simple glisser-déposer. Ainsi :

Pour créer une relation dans Access, procédez comme suit :

  1. Activez l’onglet Outils de base de données dans le Ruban d’Access, puis cliquez sur le bouton Relations.
  2. A l’aide du bouton droit de votre souris, cliquez n’ importe où sur la fenêtre qui s’affiche. Et choisissez Afficher la table dans le menu contextuel.
  3. Dans la boite de dialogue, sélectionnez la table qui vous concerne ClassesTb, puis cliquez sur le bouton Ok.
  4. Cliquez sur le champ concerné de la première table, maintenez le bouton de la souris enfoncé, et glissez vers le champ de la deuxième table puis relâchez.
  5. Modifiez les options d’intégrité référentielle s’il s’agit d’une relation de un à plusieurs. Puis, cliquez sur le bouton Créer.
    Enfin, pour appliquer l’intégrité référentielle, il faut que les conditions citées en haut soient respectées.

A vous de jouer maintenant :

Affichez la table ParentsTb et créer une relation de un à un entre la table ElevesTb et ParentsTb en utilisant respectivement les champs NumEleve et CodEleve.

Vous devez maintenant  avoir la fenêtre Relation qui ressemble à ça:

relation-access


Sommaire du coursGénéralités Découverte Tables Analyse Relations Formulaires Requêtes Etats Macros Empaquetage

 

 

Montrer !
Cacher !