Votre navigateur n'accepte pas les coockies
Aller au contenu Aller au plan du site
Accueil

ACCESS : LES RELATIONS (a)

1-Avant de commencer

Ce cours inclut des exercices pour expérimenter les relations entre les tables. Il utilise le fichier commerce3.mdb.

2-Introduction

On relie des tables entre elles par des champs en commun pour éviter la redondance. Il est inutile de réécrire plusieurs fois les mêmes informations.

Ex : inutile de réécrire une information sur un client à chaque facture.

La force des tables reliées est de donner accès à de l‘information d‘une autre table à laquelle vous n‘auriez pas eu 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, etc.
Relation facture clients

3-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 évident de déterminer quel genre de relation, appelé également cardinalité, existe entre deux tables.

Il faut se poser deux questions :

Les deux questions commencent toujours par : « Pour un enregistrement 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 la rentrer dans le tableau.

  1. Remplacez les "?" par les résultats (un ou plusieurs).
Détermination le type de relation
  Table 1   Table 2
Q1: 1 -> ?
Q2: ? <- 1
Max:      
  1. Ensuite, écrivez dans la dernière ligne le résultat le plus élevé des deux colonnes. Vous connaîtrez ainsi le type des relations.

Le prochain exercice consiste à expérimenter ce petit truc.

Vous allez essayer de déterminer quel type de relation existe entre les tables Facture et Clients. Vous devez cous poser les questions :

  1. Remplissez ensuite le tableau ci-dessous.
Résultat du 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).

3.1-Relation un à un

Ex : Un homme est marié à une seule femme. Une femme est mariée à un seul homme.

3.2-Relation un à plusieurs

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

3.3-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 sur cette page Web sur ce cas spécial.

3.4-Ce qui est nécessaire pour faire une relation

Pour mettre en place une relation, il faut au minimum :

De ce fait, vous ne pourrez pas, par exemple, créer une relation entre les champs date et numéro de téléphone. Les champs ne sont pas des mêmes types (Date/Heure, Texte).

De même, vous ne pourrez pas créer de relation entre les champs nom et prénom. Bien que les deux champs soient du type Texte, ils n‘ont pas le même longueur.

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.

Autre exception de taille : il est 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 cependant très avantageuse.

Ex : 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.

4-Création d‘une relation dans une requête

Il est très avantageux par moment 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.

  1. À partir du menu principal, appuyez sur l‘onglet des requêtes bouton requête.
  2. Appuyez sur le bouton bouton nouvelle requête.
  3. À partir du Mode création, dans la liste des tables disponibles, ajoutez les tables Facture et Clients.
  4. Sélectionnez les champs suivants de la table Facture : No Facture et Code client.
  5. Sélectionnez les champs suivants de la table Clients : Nom et Adresse.
  6. Exécuter la requête en cliquant sur le bouton 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 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 :

  1. Appuyez sur le bouton bouton mode cr&eacute;tion.
OU
  1. Du menu Affichage, sélectionnez l‘option Création.
  2. Déterminez les champs en commun entre les deux tables.

Dans notre exemple, il s‘agit des champs Code client et No client. Bien qu‘ils n‘aient pas le même nom, ils sont de même type. Ils ont aussi le même format ou la même longueur et contiennent le même type d‘information.

relation facture-clients dans une requête
  1. Placez le pointeur sur l‘un des champs en commun.
  2. Cliquez et tout en restant appuyé sur le bouton gauche de la souris, déplacez le pointeur sur l‘autre champ en commun.

Une ligne mince devrait apparaître entre les deux champs.

Les deux tables sont maintenant reliées. Sinon, réessayez.

Il se peut que, par accident, vous ayez relié des champs qui n‘ont pas le même genre d‘information. Il faut alors retirer la mauvaise relation avant de pouvoir réessayer.

  1. Cliquez sur la ligne qui relie les deux tables.
  2. Du menu Édition, sélectionnez l‘option Supprimer.
OU
  1. Appuyez sur la touche touche SUPPR du clavier.

Maintenant que les tables sont correctement reliées, nous pouvons afficher le résultat.

  1. Exécutez encore une fois la requête en appuyant sur le bouton bouton exécuter.

Le nombre d‘enregistrements devrait avoir réduit à 14 factures.

Vous remarquerez 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 à des informations qu‘aucune table, prise seule, n‘est capable de fournir. C‘est seulement une fois que ces tables sont reliées qu‘elles sont vraiment efficaces.

4.1-Le mécanisme d‘une relation

À partir d‘une requête, il est possible de modifier ou d‘ajouter des enregistrements. Lorsque 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 une information à partir d‘une requête qui contient plusieurs tables.

Vous devez vous 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.

Le champ en commun doit être celui dans lequel vous pouvez entrer plusieurs fois la même information.

Ex : 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.

5-Création de relations permanentes entre les tables

Il est avantageux de relier des tables dans la requête pour accéder à une 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 « 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.

  1. Appuyez sur le bouton bouton relations.
OU
  1. Du menu Outils, sélectionnez l‘option Relation.
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 que vous voulez relier.

Dans cet exercice, le fichier contient déjà toutes les tables qui seront nécessaires pour créer les relations sauf la table Clients.

5.1-Ajouter une table

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

  1. Du menu Relations, sélectionnez l‘option Afficher la table.
OU
  1. Appuyez sur le bouton bouton ajouter une table.
OU
afficher toutes les tables
  1. Placez le pointeur de la souris dans la zone des relations.
  2. Appuyez sur le bouton droit de la souris.
  3. Du menu contextuel, sélectionnez l‘option Afficher la table.

La fenêtre suivante va apparaître :

fenêtre ajouter une table

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

  1. Sélectionnez l‘onglet Tables.
  2. Sélectionnez la table Clients et appuyez sur le bouton bouton ajouter.
  3. Puisqu‘il n‘y a plus d‘autres tables à ajouter, appuyez sur le bouton bouton fermer.
modification relation No client - Code client

5.2-Établir les relations entre les tables

  1. Placez le pointeur sur le champ No client de la table Clients.
  2. Cliquez sur le bouton gauche de la souris pour sélectionner le champ.
  3. En restant appuyé sur le bouton gauche de la souris, déplacez le pointeur surs le champ Code client de la table Facture.
  4. Relâchez ensuite le bouton de la souris.

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

5.3-Appliquer l‘intégrité référentielle

Cette option est nécessaire pour établir une relation « forte ». C‘est-à-dire une relation qui s‘assure de l‘existence d‘une valeur dans la 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 et ainsi d‘avoir toujours des relations correctes entre les tables reliées. Aucune information ne peut être « perdue » en laissant Access valider ces règles.

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

Ex : plusieurs produits ont le même numéro de produit.

Il faut toujours que les champs en commun des deux tables aient une information dans l‘autre table.

Ex : L‘un des enregistrements contient le produit numéro 5 alors qu‘il y existe seulement quatre produits, de 1 à 4.

Voici la procédure à suivre pour fermer des objets qui seraient resté ouvert.

  1. Fermez la fenêtre des relations.
  2. 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 notre cas, c‘est pour fermer tous les objets ouverts sauf la base de données et l‘écran des relations.

  1. 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.

5.4-L‘option Mise à jour en cascade

Cette option met à jour les enregistrements dans la ou les autres tables 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 la changer pour tous les champs en commun 
des tables reliées. Dans notre cas, ce serait seulement le champ Code Client de la table Facture.

5.5-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.

Ex : pour des raisons fiscales, si un client part, il serait préférable de conserver ses données. 
Mais pour une autre base de données, pour des réservations par exemple, il serait préférable d‘enlever les options 
en même temps qu‘une réservation.

Voici une représentation des tables et de leurs relations. Vous devrez créer toutes les relations entre ces tables plus tard. Pour le moment, lisez les autres options concernant les relations.

liaisons entre les tables