IntroductionL'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 tel qu'Access, il est inutile d'écrire plusieurs fois la même information sur un client à chaque facture. 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 Facture et Clients. La table Facture contient le champ numéro de 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 numéro de 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.
|
Déterminer 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 Facture et Clients. Il faut poser les questions.
Q1: Pour 1 facture, combien ai-je de clients? La réponse est un. Une facture, un client.
Q2: Pour 1 client, combien puis-je avoir de facture? 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éterminer le type de relation | |||
Facture | Clients | ||
Q1: | 1 | -> | 1 |
Q2: | Plusieurs | <- | 1 |
Max: | Plusieurs | 1 |
Effectivement, il s'agit bien d'une relation d'un à plusieurs de Clients vers Facture. 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).
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 des mêmes types (Texte, Numérique, Date/Heure, Oui/Non, NuméroAuto...) Aussi, n'essayez pas entre les champs nom et prénom. Bien que les deux champs sont du type "texte", ils n'ont pas le même genre d'information.
Il y a cependant une exception qui confirme la règle. Il est possible de faire 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'identifications à un nouveau client. Access s'en charge automatiquement.
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 menu principal, appuyez sur l'onglet des requêtes
.
Appuyez sur
le bouton Nouveau.
De la liste
des tables disponibles, ajoutez les tables Facture et Clients.
Sélectionnez
les champs suivants de la table Facture : Numéro de facture et Code client.
Sélectionnez
les champs suivants de la table Clients : Nom et Adresse.
Exécuter
la requête.
Ce que vous voyez est le résultat de toutes les combinaisons possibles entre les deux tables. Remarquez que pour chaque numéro de facture il y a 5 clients! En fait, il y a 14 enregistrements dans la table Facture et 5 enregistrements dans la table Clients. Donc, il y a 14 * 5 (70) 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. Pour retourner au mode création :
Appuyez sur
le bouton
.
OU
Du menu Affichage,
sélectionnez l'option Création.
Déterminez
les champs en commun entre les deux tables.
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 contiennent le même genre d'information.
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.
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.
Du menu Édition,
sélectionnez l'option Supprimer.
OU
Appuyez sur
la touche Supprime du clavier.
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
.
Le nombre d'enregistrements devrait avoir réduit à 14 factures. Il faut 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.
À 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 Facture 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 5, 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 Facture et Clients sur le champ en commun numéro
de client, utilisez le champ Code client de la table Facture 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!
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 menu principal, il est possible d'accéder à la partie des relations.
Appuyez sur
le bouton
.
OU
Du menu Outils,
sélectionnez l'option Relation.
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.
Lorsque vous allez ouvrir la zone des relations pour la première fois, elle devrait être vide. Il faut que vous ajoutez les tables ou les requêtes que vous voulez relier avant d'établir les relations.
Du menu Relations,
sélectionnez l'option Afficher la table.
OU
Appuyez sur
le bouton
.
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.La fenêtre suivante
va apparaître.
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.
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.
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érentiel 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 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é ouvert.
Fermez
la fenêtre des relations.
Du menu Fenêtre, sélectionnez l'objet (table, requête ...) qui
est resté ouvert.
L'option du menu ouvert vous permet de passer facilement d'un objet à un autre. Dans ce cas, c'est pour fermer tous les objets ouverts sauf la base de données et l'écran des relations.
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.
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.
Du menu Édition,
sélectionnez l'option Supprimer.
OU
Appuyez sur
la touche supprime du clavier.
Cliquez sur
la ligne qui relie les deux tables.
Double-cliquez
sur cette ligne.
OU
Du menu Relations,
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 Facture 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 d'une relation de type 1 à plusieurs.
Il faut maintenant créer la relation entre les tables Employé et Facture sur leur champ en commun.
Placez
le pointeur par-dessus le champ Numéro de poste de la table Employé.
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érentiel.
Assurez-vous
que la relation est de 1 à plusieurs.
Appuyez
sur le bouton Créer.
La relation ne fonctionnera pas!
Il faut attentivement lire le message pour comprendre ce qui arrive. Dans ce cas, c'est la deuxième phrase qui explique la situation: "Les données de la table "Facture" ne respectent pas les règles d'intégrité référentielle". Et c'est vrai. Les deux derniers enregistrements de la table n'ont pas de contenu valide dans le champ No Vendeur. C'est pour cette raison qu'Access refuse de créer une relation permanente entre ces deux tables.
Pour cet exemple, vous savez la cause du problème. Il suffit de mettre des valeurs appropriés pour ces deux enregistrements pour régler le problème. Mais que faire lorsque vous ne savez pas la cause du problème? Access vous offre un outil indispensable pour s'assurer du bon fonctionnement des relations. Il s'agit de la requête de Non correspondance. La partie qui suit consiste à créer une requête de non correspondance qui détermine la cause du problème entre les tables Facture et Employés.
Fermer
la zone des relations en sélectionnant du menu Fichier l'option Fermer.
Cliquez
sur l'onglet des requêtes
.
Appuyez
sur le bouton Nouveau.
De
la liste des requêtes possibles, choisir Assistant Requête de non
correspondance.
Appuyez
sur le bouton OK.
Pour déterminer les enregistrements qui ne correspondent pas entre les deux tables, il faut premièrement indiquer à Access le nom des deux tables à relier suivi du nom des champs en commun des deux tables.
Il faut indiquer à Access le nom de la première table à relier qui cause un problème de relation.
De
la liste des tables, sélectionnez la table Facture.
Appuyez
sur le bouton Suivant >.
Il faut maintenant indiquer le nom de la seconde table qui cause un problème de relation.
De
la liste des tables, sélectionnez la table Employés.
Appuyez
sur le bouton Suivant >.
Il faut ensuite montrer à Access quels sont les champs en commun des deux tables.
De
la table Facture, cliquez sur le champ No vendeur.
De la
table Employés, cliquez sur le champ Numéro de poste.
Appuyez
sur le bouton
.
Appuyez
sur le bouton Suivant >.
Access vous demande ensuite quels sont les champs que vous voulez voir dans la requête. Pour les besoins de l'exemple, sélectionnez tous les champs.
Appuyez
sur le bouton
.
Appuyez
sur le bouton Suivant >
.
Pour terminer, Access vous demande le nom à donner à la requête. Pour le moment, ne changez pas le nom de la requête.
Appuyez
sur le bouton Terminer.
Access affiche le résultat de la requête.
Les factures 21 et 22 n'ont pas de valeurs valides dans le champ No vendeur. La facture 21 à un numéro de vendeur impossible puisqu'il y a seulement 7 employés présentement dans l'entreprise. Pour la facture 22, il y a aucun numéro de vendeur. Une relation est impossible si le contenu d'un champ en commun est vide.
Pour
les deux factures, entrez le numéro de vendeur 7 au champ No vendeur. Après cette correction, il vous est maintenant possible de
créer une relation "permanente" entre ces deux tables.
Fermez
la requête.
Retournez
à la section des relations.
Refaite
la relation entre les tables Employés et Facture sur leur
champ en commun (Numéro de poste et No vendeur).Les deux
tables sont maintenant reliées sur un champ en commun. Vous pouvez maintenant
créer les relations entre les tables de cette base de données tel
qu'au graphique précédent.
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 Facture et Produits. Avant tout, il faut déterminer de quel genre de relation qu'il s'agit.
1 facture 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. Il faut créer une table intermédiaire qui contient
la clé primaire des deux tables. Il faut ensuite créer deux relations
de type 1 à plusieurs entre les tables Facture, Produit et
la table intermédiaire en utilisant le champ de la clé primaire des
deux tables. Ex. :
Facture | Relation | Transition Fact-Inv | Relation | Inventaire |
No Facture | 1 -> plusieurs | Numéro de facture | ||
Numéro de produit | plusieurs <- 1 | Numéro d'inventaire | ||
Quantité achetée |
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 jaune
.
Du menu Fichier,
sélectionnez l'option Fermer.
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
.
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.
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 le manuel " 150 fonctions Excel expliquées ". Vous recevrez aussi les prochaines infolettres sur les nouveautés du site et des formations détaillées que vous ne trouverez nulle part ailleurs. |