PrecedentSuivant

Access: Les relations



Introduction
Les types de relations ou la cardinalité
Ce qui est nécessaire pour faire une relation
Création d'une relation dans une requête
Création de relations permanentes entre les tables
Que faire lorsqu'Access refuse de créer une relation


Avant de commencer

Cette page inclut des exercices pour expérimenter avec les relations entre les tables. Pour vous aider à la compréhension, vous pouvez copier le fichier demoacc2.mdbpour ceux qui ont Access 97 ou demoa2k2.mdb pour ceux qui ont Access 2000 de la page des fichiers de démonstrations . Cliquez ici pour vous rendre à cette page. Copier la base de données appropriée sur une disquette ou sur votre disque dur et revenez ensuite à cette page.

Access 2010 - Relation entre deux tables

L'aspect pratique de relier des tables sur des champs en commun est pour éviter la redondance. Il est inutile de réécrire plusieurs fois les mêmes informations. Par exemple, avec une base de données relationnelle telle qu'Access, il est inutile d'écrire plusieurs fois la même information sur un client à chaque Factures. La force des tables reliées est de vous donner accès à de l'information d'une autre table que vous n'auriez pas accès sans une relation entre les tables. Prenons l'exemple des tables Factures et Clients. La table Factures contient le champ Code client et aucune autre information sur le client. Mais ce champ est la clé pour relier les deux tables. Il est possible de le relier au champ No client de la table Clients. Une fois relié, il est ensuite possible d'avoir les autres informations sur le client tel que le nom de la compagnie, son adresse, ses personnes contacts, sa marge de crédit etc.

Les types de relations ou la cardinalité

Il existe trois types de relations: un à un, un à plusieurs et plusieurs à plusieurs. Ce n'est pas toujours facile de déterminer quel genre de relation, aussi appelé cardinalité, qu'il y a entre deux tables. Il faut de la pratique. J'ai trouvé un petit truc pour déterminer quel genre de relation qu'il y a entre deux tables. Je l'ai trouvé par hasard en donnant mes démonstrations. Je ne sais pas jusqu'à quel point qu'il est efficace. Mais, il fonctionne très bien durant les démonstrations. Il s'agit de poser deux questions. 

1- Pour 1(enregistrement de la première table), combien peut-il en avoir dans la seconde table?
2- Pour 1(enregistrement de la seconde table), combien peut-il en avoir dans la première table? 

Les deux questions commencent toujours par: "Pour 1 de ceci, combien de cela ?" Les deux seules réponses acceptables sont soit un ou plusieurs. Une fois que vous avez les réponses, placez-les dans le petit tableau qui suit. Il faut inverser la question numéro deux pour l'entrer dans le tableau. Remplacez-les "?" par les résultats (un ou plusieurs). 

Déterminez le type de relation

 

Table 1

 

Table 2

Q1 :

1

?

Q2 :

?

1

Max :

 

À

 

Ensuite, vous écrivez sur la dernière ligne le plus gros, entre un et plusieurs, de la deuxième et la dernière colonne. Vous pouvez ensuite savoir de quel genre de relation qu'il s'agit.

Le prochain exercice consiste à expérimenter avec ce petit truc. Il faut déterminer quel genre de relation qu'il peut y avoir entre les tables Factures et Clients. Il faut poser les questions.

Q1: Pour 1 Factures, combien ai-je de clients' La réponse est un. Une Factures, un client. 
Q2: Pour 1 client, combien puis-je avoir de Factures' La réponse est plusieurs. Du moins, vous l'espérez. Il n'est pas pratique d'avoir un client qui vient seulement une fois ! Remplissez ensuite le tableau ci-dessous. 

Déterminez le type de relation

 

Factures

 

Clients

Q1 :

1

1

Q2 :

1

Max :

À

1

Ensuite, vous écrivez sur la dernière ligne le plus gros, entre un et plusieurs, de la deuxième et la dernière colonne. Vous pouvez ensuite savoir de quel genre de relation qu'il s'agit. Effectivement, il s'agit bien d'une relation d'un à plusieurs entre les tables Clients et Factures. Vous pouvez maintenant essayer avec d'autres tables ou d'autres situations. 

Ceci veut aussi dire que vous pouvez trouver seulement une fois l'information en commun dans l'une des tables et plusieurs fois dans l'autre. Pour cet exemple, chaque valeur du champ No client de la table Clients est unique. Il n'y a pas deux enregistrements (ou clients) avec le même numéro de client. Cependant, dans la table Factures, vous pouvez retrouver le même numéro de client pour plusieurs enregistrements différents. C'est pour cette raison que la relation est appelée de 1 à plusieurs. L'information en commun se retrouve seulement une fois dans la première table (Clients) et potentiellement plusieurs fois dans la seconde (Factures).

Relation un à un

Ex.: Un homme est marié à une seule femme. Une femme est mariée à un seul homme.
Dois-je vous rappeler que la bigamie est illégale ici ! 

 

Relation un à plusieurs

Ex.: Une personne peut posséder plusieurs motos. Une moto ne peut être possédée que par une seule personne. (On oublie les cas de copropriété). 


Relation plusieurs à plusieurs

Ex:. Un étudiant suit plusieurs cours. Un cours est suivi par plusieurs étudiants. 

Il faut faire attention lors de la conception d'une base de données avec des relations de type "plusieurs à plusieurs". Il y a plus de détails plus loin dans ce document sur ce cas spécial.

Ce qui est nécessaire pour créer une relation :

+2 tables (ou requêtes ou une combinaison des deux) 
+1 champ en commun dans chacune des tables.
+Même type de champ (Texte avec texte, numérique avec numérique ...) 
+Même longueur (Pas un champ long de 15 caractères avec un autre long de 50 caractères !) 
+Même genre d'information (Ex.: Code d'inventaire avec des codes d'inventaires, NAS avec NAS ...) 

N'essayez pas de créer une relation entre les champs Date et Numéro de téléphone. Les champs ne sont pas du même type (Texte, Numérique, Date/Heure, Oui/Non, NuméroAuto...) Aussi, n'essayez pas de créer un lien entre les champs nom et prénom. Bien que les deux champs soient du type "Texte", ils n'ont pas le même contenu.
 
Il y a cependant une exception qui confirme la règle. Il est possible de créer une relation entre un champ de type NuméroAuto et un champ de type Numérique dont la taille du champ est "Entier long". Il serait impossible de créer une relation de type "un à plusieurs" si les champs en commun sont de type NuméroAuto. Par définition, ce type de champ ne peut pas avoir deux fois la même information !
 
Cette exception est de taille et très avantageuse. Par exemple, l'utilisateur n'a pas besoin de s'inquiéter de donner des numéros d'identification à un nouveau client. Access s'en charge automatiquement.

Création d'une relation dans une requête

Il est très avantageux par moments d'être capable d'afficher les informations contenues de plusieurs tables en même temps. Il faut cependant avoir une relation entre les tables pour avoir un résultat intéressant. Le prochain exercice consiste à créer une relation entre deux tables dans une requête.
 
*À partir du Ruban, sélectionnez l'onglet Créer
*Appuyez sur le bouton Création de requête

*De la liste des tables disponibles, ajoutez les tables Factures et Clients
*Sélectionnez les champs suivants de la table Factures : Numéro de Factures et Code client
*Sélectionnez les champs suivants de la table Clients : Nom et Adresse
*Exécuter la requête en appuyant sur le bouton Access 2010 - requête - Bouton Exécuter
 
Ce que vous voyez est le résultat de toutes les combinaisons possibles entre les deux tables. Remarquez que pour chaque numéro de Factures il y a 5 clients ! En fait, il y a 3 enregistrements dans la table Factures et 5 enregistrements dans la table Clients. Donc, il y a 3 * 5 = 15 enregistrements d'activés. Ceci est en réalité impossible. La raison est qu'il n'y a pas de relation entre ces deux tables en ce moment. Si vous ne faites pas de relations entre les tables d'une requête, Access va afficher toutes les combinaisons d'enregistrements possibles entre les deux tables. Il faut créer une relation entre deux tables pour éviter ce genre de situation.

Access 2010 - Affichage - Mode création

Pour retourner en mode création : 

*À partir de l'onglet Accueil ou l'onglet Champs des Outils de table, appuyez sur la partie du bas du bouton Affichage.
*Sélectionnez l'option Mode Création.

Avant de créer une relation entre deux tables, il faut premièrement déterminer les champs entre celles-ci. Dans ce cas, il s'agit des champs Code client et Numéro de client. Bien qu'ils n'aient pas le même nom, ils sont des mêmes types de champs. Ils ont aussi le même format ou de longueur et, surtout,  contiennent le contenu.  Dans ce cas, il s'agit de l'information qui identifie un client.

*Placez le pointeur par-dessus l'un des champs en commun. 
*En gardant votre doigt sur le bouton gauche de la souris, déplacez le pointeur par-dessus l'autre champ en commun. 
*Relâchez ensuite le bouton de la souris.

Access 2010 - Deux tables reliées par une relation simple

Une ligne mince devrait apparaître entre les deux champs. Les deux tables sont maintenant reliées. Sinon, réessayez. Il est aussi possible, par accident, d'avoir relié des champs qui n'ont pas le même genre d'information.

Il faut retirer la mauvaise relation avant de pouvoir réessayer.

*Cliquez sur la ligne qui relie les deux tables.

*Appuyez sur la touche Supprime
OU
*Appuyez sur le bouton droit de la souris.
*Du menu contextuel, sélectionnez l'option Supprimer.

Une fois que les tables sont correctement reliées, il est temps d'afficher le résultat.

*Exécuter encore une fois la requête en appuyant sur le bouton  Access 2010 - requête - Bouton Exécuter

Le nombre d'enregistrements devrait avoir réduit à 3 Factures. Il faut aussi remarquer que vous voyez les informations de deux tables en même temps ! C'est là l'un des grands avantages des bases de données relationnelles; être capable d'accéder à de l'information qu'aucune table, prise seule, est capable de fournir. C'est seulement une fois que ces tables sont reliées qu'elles sont vraiment efficaces.

Le mécanisme d'une relation 

À partir d'une requête, il est possible de modifier ou d'ajouter des enregistrements. Au moment où vous écrivez une valeur dans l'un des champs en commun. Access va essayer de trouver si cette valeur existe dans l'un des enregistrements de l'autre table reliée. S'il trouve, vous aurez accès au contenu de tous les champs de l'enregistrement. Prenons l'exemple des tables Factures et Clients qui sont reliées sur les champs en commun Code client et No client dans une requête. Si vous écrivez un chiffre entre 1 et 3, Access pourra trouver un enregistrement dans la table Clients et vous afficher toutes les informations de l'enregistrement si vous le voulez.  Il est possible d'entrer ou de modifier de l'information à partir d'une requête qui contient plusieurs tables. Il faut s'assurer que l'un des champs en commun de toutes les tables reliées soit utilisé dans la requête. Sinon, Access va vous avertir qu'il ne peut pas réaliser la requête. 

Attention !

De plus, ce champ en commun doit être celui dans lequel vous pouvez entrer plusieurs fois la même information. Par exemple, si vous faites une relation entre les tables Factures et Clients sur le champ en commun numéro de client, utilisez le champ Code client de la table Factures puisque vous pouvez entrer plusieurs fois le même numéro de client dans les factures. Une fois que vous avez entré les informations dans la table Clients, vous ne pouvez pas le rentrer une seconde fois !

Création de relations permanentes entre les tables

Il est avantageux de relier des tables dans la requête pour accéder à de l'information qu'aucune des tables prises seules ne possède. Le problème avec cette technique est qu'il faut refaire les relations à chaque fois que vous faites une nouvelle requête. Access vous offre une manière de créer des relations plus " permanentes " entre les tables de votre base de données. Elle a aussi l'avantage de vérifier "l'intégrité" des relations entre les tables. À partir du Ruban, il est possible d'accéder à la partie des relations. 

*De l'onglet Outils de base de données, sélectionnez l'option Relations.

Access  2010 - Onglet Outils de relations

C'est dans cette fenêtre que vous allez créer les relations entre les tables. Lorsque vous ouvrez cette section pour la première fois, il n'y a pas de tables; seulement un grand espace vide. Il faut premièrement ajouter les tables ou les requêtes sur lesquelles vous voulez relier. Pour accélérer la démonstration, j'ai déjà mis pour vous toutes les tables qui seront nécessaires pour les relations sauf la table Clients.

Access 2010 - Tables sans relations

Ajouter une table

Lorsque vous allez ouvrir la zone des relations pour la première fois, elle devrait être vide. Il faut que vous ajoutiez les tables ou les requêtes que vous voulez relier avant d'établir les relations.

*De l'onglet Outils de relation, appuyez sur le bouton Afficher la table
OU
*Placez le pointeur de la souris dans la zone des relations.
*Appuyez sur le bouton droit de la souris.
*Du menu contextuel, sélectionnez l'option Afficher la table.

Access 2010 - Liste des tables

Avec Access, il est possible de relier des tables ou des requêtes si elles ont un champ en commun.

*Sélectionnez l'onglet Tables.
*Ensuite, sélectionnez les tables dont vous voulez relier. Pour la démonstration,  sélectionnez la table Clients et appuyez sur le bouton Ajouter
*Puisqu'il n'y a plus d'autres tables à ajouter, appuyez sur le bouton Fermer.

Établir les relations entre les tables.

*Placez le pointeur par-dessus le champ Numéro de client de la table Clients
*Cliquez sur le bouton gauche de la souris pour sélectionner le champ. 
*En gardant un doigt sur le bouton gauche de la souris, déplacez le pointeur par-dessus le champ Code client
*Relâchez ensuite le bouton de la souris.

Une fois que vous aurez fait la relation, l'écran suivant va apparaître.

Access 2010 - Création de relation avec intégrité référentielle

Appliquer l'intégrité référentielle

Cette option est nécessaire pour établir une relation que j'appelle " forte ". C'est une relation qui s'assure qu'il existe une valeur dans l'autre table reliée. En activant l'option "appliquer l'intégrité référentielle", Access s'assure que certaines règles d'intégrité d'une relation soient respectées. C'est pour que les relations entre les tables reliées soient toujours bonnes. Aucune information ne peut être "perdu" en laissant Access le droit de valider ces règles.

Access peut refuser de créer une relation avec intégrité référentielle pour ces raisons :

+La table qui contient l'enregistrement unique n'a pas l'option d'index sans doublons ou clé primaire. 
+La table qui contient l'enregistrement unique a des doublons. Ex. : plusieurs produits ont le même numéro de produit. 
+L'un des enregistrements de l'une des tables reliées à un des champs communs vide. Il faut toujours que les champs en commun des deux tables aient de l'information dans l'autre table. 
+La valeur écrite dans la table qui peut contenir plusieurs fois la même valeur dans le champ en commun n'a pas d'équivalent dans l'autre table. Ex. : L'un des enregistrements contient le numéro de produit numéro 5 bien qu'il y ait seulement quatre produits, de 1 à 4, de disponible. 
+Une autre raison est que l'une des tables est "ouverte" ou affichée. Il faut fermer toutes les tables, requêtes, états et formulaires avant de créer les relations entre les tables. Voici la procédure à suivre pour fermer des objets qui seraient restés ouverts.
 
*Fermez la fenêtre des relations . 
*Sélectionnez l'onglet de la table ou de la requête qui est resté ouverte.
*Fermez l'objet.
*Si d'autres objets sont ouverts, sauf pour la base de données et l'écran des relations, répétez les opérations précédentes pour fermer ces objets. Vous pourrez ensuite réessayer de créer des relations entre les tables.

L'option Mise à jour en cascade.

Met à jour dans la ou les autres tables qui sont reliées. Si vous changez le numéro de client, tous les enregistrements des autres tables reliées dont le code client est identique vont aussi être modifiés. Ex.: Si vous changez la valeur du champ No Client de la table Clients, Access va aussi la changer pour tous les champs en commun des tables reliées. Dans ce cas, se serait seulement le champ Code Client de la table Factures.

L'option Effacer en cascade.

Cette option efface les enregistrements de l'autre table qui ont le même champ en commun que l'enregistrement supprimé. Quand doit-on activer cette option ? Cela dépend du contenu des tables. Dans ce cas, pour des raisons fiscales, il serait préférable de conserver les données même si un client ne veut plus de vos services. Mais pour une base de données sur des réservations par exemple, il serait préférable d'enlever une réservation en même temps que les informations sur le client. Voici un graphique avec une représentation des tables et des relations entre elles. Un peu plus tard, on vous demandera de créer toutes les relations entre ces tables. Pour le moment, lisez les autres options possibles sur les relations. 

Access 2010 - Toutes les tables sont reliées de façon directe ou indirecte

Supprimer une relation.

Il est possible de retirer une relation entre des tables. Il existe quelques raisons pour retirer une relation entre des tables ou des requêtes. La première est que vous avez commis une erreur au moment de la création de la relation. Vous avez accidentellement choisi le mauvais champ au moment de la création de la relation. Ou, après une analyse plus approfondie, vous changez les relations entre les tables. Aussi, pour vous permettre de modifier la structure d'une table reliée, il peut être nécessaire auparavant de retirer une relation. Access va vous le dira si c'est le cas.

*Cliquez sur la ligne qui relie les deux tables. 

*Appuyez sur la touche Supprime
OU
*Appuyez sur le bouton droit de la souris. 
*Du menu contextuel, sélectionnez l'option Supprimer.

Modifier les options d'une relation.

*Faites un double-clic sur la ligne qui relie les deux tables.
OU
*De l'onglet Outils de relation, sélectionnez l'option Modifier une relation.

Les options de la relation vont ensuite apparaître. Vous pourrez les modifier et ensuite appuyer sur le bouton créer pour conserver ces modifications.

Il est maintenant temps de créer les relations entre les tables. Voici un cas particulier qui pourrait bien vous arriver au moment de la création de relations entre les tables de votre base de données.

Création d'une relation entre les tables Factures et Employés

Il faut premièrement déterminer quel type de relation qu'il s'agit ou sa cardinalité. 

1 facture est générée par un seul vendeur. 
1 vendeur peut générer plusieurs factures. 

Il s'agit donc d'une relation de type 1 à plusieurs. Il faut maintenant créer la relation entre les tables Employés et Factures sur leur champ en commun. 

*Placez le pointeur par-dessus le champ Numéro de poste de la table Employés
*Cliquez sur le bouton gauche de la souris pour sélectionner le champ. 
*En gardant un doigt sur le bouton gauche de la souris, déplacez le pointeur par-dessus le champ No vendeur
*Relâchez ensuite le bouton de la souris. Il faut maintenant choisir les options.
*Activez l'option Appliquer l'intégrité référentielle
*Assurez-vous que la relation soit de 1 à plusieurs
*Appuyez sur le bouton Créer.

Sortir de l'écran des relations

Si vous voulez conserver les relations entre les tables, vous devez premièrement les sauvegarder avant de quitter le mode de relations.

*Cliquez sur le bouton avec la disquette .
*Fermez la fenêtre des relations .

Les relations de plusieurs à plusieurs 

Access vous offre une manière facile de créer des relations de type 1 à 1 et de 1 à plusieurs avec l'option d'intégrité référentiel. Cependant, la création de relations de type plusieurs à plusieurs nécessitent plus de travail. Prenons l'exemple de la création d'une relation entre les tables Factures et Produits. Avant tout, il faut déterminer de quel genre de relation qu'il s'agit. 

1 Factures peut contenir plusieurs produits.
1 produit peut être contenu dans plusieurs Factures. 

Il s'agit bien d'une relation de plusieurs à plusieurs. 

Il est impossible de faire directement une relation de type plusieurs à plusieurs. Les caractéristiques des clés primaires ne permettent pas le dédoublement de ceux-ci. Il faut créer une table intermédiaire, ou une table composée, qui contient la clé primaire des deux tables que vous voulez relier. Il faut ensuite créer deux relations de type 1 à plusieurs entre les tables Factures, Produit et la table intermédiaire en utilisant le champ de la clé primaire des deux tables. 

Access 2010 - 3 tables dans une relation de plusieurs à plusieurs

N'oubliez pas d'activer l'option d'intégrité référentielle et aussi l'option de mise à jour en cascade. Sinon, la relation de plusieurs à plusieurs est plus difficile. Pour qu'une relation fonctionne, il faut qu'il y ait le même genre d'information dans les deux tables reliées. L'option "Mettre à jour en cascade" s'assure que l'information se retrouve aussi dans l'autre table. Il vous est donc inutile de vous préoccuper d'avoir l'information dans les deux tables. Access s'en occupe pour vous.  

Création d'une facture

C'est ici que toutes les relations entre les tables seront mises en avantage. Le prochain exercice consiste à la création d'une requête qui contient toutes les tables reliées.

*Cliquez sur l'onglet des requêtes Onglet requête.
*Appuyez sur le bouton Nouveau.
*Sélectionnez de la liste des tables: Facture, Transition Fact-Inv, Inventaire, Clients et Employés.
*Appuyez sur le bouton Fermer.

À chaque fois que vous ajouter une table à la requête, la table s'ajoute ainsi que ses relations avec les autres tables. De plus, il s'agit de relations avec les options d'intégrité référentielle. La première relation était une relation "simple"; sans la possibilité d'une relation avec intégrité référentielle.

*De la liste des champs possibles, sélectionnez en ordre les champs suivants:

Numéro de facture (Transition Fact-Inv), Code client (Facture), No vendeur (Facture), Numéro de produit (Transition Fact-Inv), Quantité (Transition Fact-Inv), Prix Unitaire (Inventaire).

C'est le minimum de champs nécessaire pour avoir une requête avec des relations qui fonctionnent. Il faut que l'un des champs dans une relation soit affiché. De plus, ce champ doit être celui dont vous pouvez entrer plusieurs fois la même information (plusieurs). Vous pouvez ajouter les autres champs à votre choix. Puisqu'ils sont reliés, toutes les informations vont automatiquement s'afficher sans rien avoir à ajouter de l'information.

Pour vous démontrer l'avantage de relier les tables, le dernier champ à ajouter est un champ calculé. Il va prendre l'information de deux différentes tables (Quantité et Prix unitaire) pour trouver le total de la transaction. Puisqu'il est possible de trouver le total à partir des informations des tables, il est inutile d'avoir un champ "Total" dans l'une des tables.

*Placez le curseur dans la case vide à la droite du champ Prix unitaire.
*Écrivez le texte suivant: Total:[Quantité] * [Prix unitaire]

Comme pour tous les champs calculés, il faut lui donner un nom (Total). Il faut ensuite séparer le nom de la formule en écrivant un ":". Il reste qu'à écrire la formule. Ce champ va donner le total de chacun des items de la facture.

Entrée de factures

Après avoir compléter les opérations précédentes pour la création de relations entre les différentes tables de la base de données, il reste qu'a voir le résultat en entrant quelques facture et expliquer le fonctionnement des options choisies. Pour entrer les données,

*Appuyez sur le bouton *.
OU
*Du menu Affichage, sélectionnez l'option Table de données.
* N'entrez aucune information dans le champ Numéro de facture et appuyez sur la touche Entrée.

Dès que le curseur est passé au champ suivant, un chiffre est apparu dans le premier champ. Pourquoi?

C'est à cause de la relation entre ce champ et celui de No Facture de la table Facture. Non seulement la relation est de type "1 à plusieurs", mais il y a aussi l'option "Mettre à jour en cascade". C'est cette option qui force Access à voir le contenu du champ No facture et de le recopier dans le champ Numéro de facture. Pas besoin d'entrer l'information à chaque fois que vous commencer une nouvelle facture.

*Entrez les informations pour les autres champs à votre choix.

Vous voyez qu'il est possible d'entrer de l'information dans plusieurs tables en même temps. Aussi, l'avantage des relations puisqu'il y a redondance d'information seulement pour les champs en commun des différentes tables. Il est inutile de réécrire l'information sur le client ou sur le produit puisqu'Access a accès à cette information grâce aux relations entre les tables.

Le prochain exercice consiste à ajouter un second item à la même facture.

*Dans le champ Numéro de facture, entrez le même numéro de facture de l'enregistrement précédent.
*Entrez les informations pour les autres champs à votre choix.

C'est ainsi qu'il est possible d'ajouter plusieurs items à la même facture. Vous pourrez utiliser cette technique pour d'autres tables qui ont une relation de type "1 à plusieurs".



 

Abonnez-vous à l'infolettre

Abonnez-vous à l'infolettre du site pour recevoir les dernières nouvelles et aussi des formations à votre courriel. Vous pouvez voir la liste des dernières infolettres ici.

Cliquez ici pour vous abonner à l'infolettre





Ce site est hébergé par 1&1.com