Introduction
Après avoir créé une table pour chaque sujet de la base de données, vous devez donner les moyens à Access de renvoyer ces informations en cas de besoin. Pour ce faire, vous devez insérer des champs communs dans les tables liées et définir des relations entre ces tables. Vous pouvez alors créer des requêtes, des formulaires et des états qui affichent des informations issues de plusieurs tables à la fois. Par exemple, le formulaire suivant comporte des informations issues de plusieurs tables :
1. Les informations de ce formulaire proviennent de la table Clients…
2. …de la table Commandes…
3. …de la table Produits…
4. …et de la table Détails commande.
Le nom de client figurant dans la zone Facturer à provient de la table Clients, les valeurs de Réf commande et Date de commande sont issues de la table Commandes, le nom de produit est tiré de la table Produits, et les valeurs de Prix unitaire et Quantité ont pour origine la table Détails commande. Ces tables sont liées entre elles de diverses façons pour permettre l’insertion des informations de chacune d’elle dans un formulaire.
Dans l’exemple précédent, les champs des tables doivent être coordonnés pour afficher des informations sur la même commande. Les relations entre tables rendent cette coordination possible. Une relation entre tables fonctionne en faisant correspondre les données de champs clés (il s’agit souvent de champs dont le nom est identique dans les deux tables). Dans la plupart des cas, ces champs correspondants constituent la clé primaire d’une table, qui fournit un identificateur unique pour chaque enregistrement, et une clé étrangère dans l’autre table. Par exemple, les employés peuvent être associés aux commandes dont ils sont responsables en créant une relation entre tables entre les champs Réf employé des tables Employés et Commandes.
1. Réf employé apparaît dans les deux tables, comme clé primaire…
2. … et clé étrangère.
Types de relations entre les tables
Il existe trois types de relations entre les tables dans Access.
- Relation un-à-plusieursUtilisons comme exemple une base de données de suivi des commandes qui comprend une table Clients et une table Commandes. Un client peut passer toutes les commandes qu’il souhaite. De ce fait, à chaque client représenté dans la table Clients peut correspondre un grand nombre de commandes dans la table Commandes. La relation entre la table Clients et la table Commandes est une relation un-à-plusieurs.
Pour représenter une relation un-à-plusieurs dans la structure de votre base de données, prenez la clé primaire du côté « un » de la relation et ajoutez-la comme champ supplémentaire à la table du côté « plusieurs » de cette relation. Dans ce cas, vous ajoutez par exemple un nouveau champ (le champ ID de la table Clients) à la table Commandes et vous l’appelez Réf client. Access peut alors utiliser le numéro Réf client dans la table Commandes pour rechercher le client approprié pour chaque commande.
- Relation plusieurs-à-plusieursExaminons maintenant la relation entre une table Produits et une table Commandes. Une même commande peut porter sur plusieurs produits. D’un autre côté, un même produit peut figurer sur plusieurs commandes. Ainsi, vous pouvez avoir plusieurs enregistrements dans la table Produits pour chaque enregistrement de la table Commandes. En outre, vous pouvez avoir plusieurs enregistrements dans la table Commandes pour chaque enregistrement de la table Produits. Cette relation est appelée relation plusieurs-à-plusieurs. Pour identifier les relations plusieurs-à-plusieurs existantes entre vos tables, il est important de prendre en compte les deux côtés de la relation.
Pour représenter une relation plusieurs-à-plusieurs, vous devez créer une troisième table, souvent appelée « table de jonction », qui décompose la relation plusieurs-à-plusieurs en deux relations un-à-plusieurs. Vous devez insérer la clé primaire de chacune des deux tables dans la troisième. Par conséquent, la troisième table enregistre chaque occurrence (ou instance) de cette relation. Par exemple, la table Commandes et la table Produits ont une relation plusieurs-à-plusieurs qui est définie en créant deux relations un-à-plusieurs avec la table Détails commande. Une commande peut porter sur plusieurs produits et chaque produit peut figurer sur plusieurs commandes.
- Relation un-à-unDans une relation un-à-un, chaque enregistrement de la première table ne peut avoir qu’un seul enregistrement correspondant dans la deuxième, et chaque enregistrement de la deuxième table ne peut avoir qu’un seul enregistrement correspondant dans la première. Cette relation n’est pas courante sachant que les informations ainsi liées sont en général stockées dans la même table. Vous pouvez utiliser une relation un-à-un pour diviser une table contenant de nombreux champs, pour isoler une partie d’une table pour des raisons de sécurité, ou pour stocker des informations qui s’appliquent uniquement à un sous-ensemble de la table principale. Lorsque vous identifiez une relation de ce type, les deux tables doivent partager un champ commun.
Pourquoi créer des relations entre les tables ?
Vous pouvez explicitement créer des relations entre tables en utilisant la fenêtre Relations ou en faisant glisser un champ depuis le volet Liste de champs. Access a recours aux relations entre les tables pour décider comment joindre des tables que vous avez besoin d’utiliser dans un objet de base de données. Vous avez tout intérêt à créer des relations entre tables avant de créer d’autres objets de base de données, tels que des formulaires, des requêtes et des états, et ce à plusieurs titres.
- Les relations entre tables renseignent les structures de requêtesPour utiliser des enregistrements issus de plusieurs tables, vous devez souvent créer une requête qui joint les tables. La requête fonctionne en faisant correspondre les valeurs du champ clé primaire de la première table avec un champ clé étrangère dans la deuxième. Par exemple, pour renvoyer les lignes qui répertorient toutes les commandes pour chaque client, vous devez créer une requête qui joint la table Clients à la table Commandes en fonction du champ Réf client. Dans la fenêtre Relations, vous pouvez spécifier manuellement les champs à joindre. Néanmoins, si la relation est déjà définie entre les tables, Access fournit la jointure par défaut, en fonction de la relation existante entre les tables. En outre, si vous utilisez l’un des Assistants Requête, Access exploite les informations des relations entre tables que vous avez déjà définies pour vous proposer plusieurs choix pertinents et pour renseigner au préalable les paramètres de propriété avec les valeurs par défaut appropriées.
- Les relations entre tables renseignent les structures de formulaires et d’étatsLorsque vous concevez un formulaire ou un état, Access exploite les informations des relations entre tables que vous avez déjà définies pour vous proposer plusieurs choix pertinents et pour renseigner au préalable les paramètres de propriété avec les valeurs par défaut appropriées.
- Les relations entre tables servent de base à l’application de l’intégrité référentielle pour éviter la présence d’enregistrements orphelins dans votre base de données. Un enregistrement orphelin est un enregistrement qui fait référence à un autre enregistrement qui n’existe pas (p.ex., un enregistrement de commande qui fait référence à un enregistrement de client non existant).Lorsque vous créez une base de données, vous répartissez les informations entre plusieurs tables, dont chacune comporte une clé primaire. Vous ajoutez alors des clés étrangères aux tables liées qui font référence à ces clés primaires. Ces paires de clés constituent la base des relations entre tables et des requêtes portant sur plusieurs tables. Il est important que ces références de clés primaires-étrangères restent synchronisées. L’intégrité référentielle, qui dépend des relations entre tables, permet d’assurer la synchronisation entre les références.
Comprendre l’intégrité référentielle
Lorsque vous créez une base de données, vous répartissez vos informations de base de données entre plusieurs tables en fonction de leurs sujets pour réduire la redondance des données. Vous laissez alors Access rassembler les données en plaçant des champs communs dans les tables liées. Par exemple, pour représenter une relation un-à-plusieurs, vous prenez la clé primaire de la table « une », et vous l’ajoutez comme champ supplémentaire à la table « plusieurs ». Pour rassembler les données, Access prend la valeur de la table « plusieurs » et recherche la valeur correspondante dans la table « une ». Ainsi, les valeurs de la table « plusieurs » font référence aux valeurs correspondantes dans la table « une ».
Imaginons que vous ayez une relation un-à-plusieurs entre les tables Expéditeurs et Commandes et que vous souhaitiez supprimer un expéditeur. Si l’expéditeur à supprimer présente des commandes dans la table Commandes, celles-ci deviennent « orphelines » dès lors que vous supprimez l’enregistrement de l’expéditeur. Ceci dit, la référence de l’expéditeur figurera toujours sur les commandes, mais elle ne sera plus valide, car l’enregistrement à laquelle elle fait référence n’existe plus.
L’intégrité référentielle consiste à empêcher les orphelins et à assurer la synchronisation des références pour éviter que cette situation hypothétique ne se présente.
Vous appliquez l’intégrité référentielle en l’activant pour une relation entre tables. Une fois qu’elle est appliquée, Access bloque toute opération qui enfreint cette intégrité. En d’autres termes, Access bloque les mises à jour qui modifient la cible d’une référence, et les suppressions qui l’éliminent. Une modification de clé primaire pour un expéditeur qui présente des commandes dans la table Commandes peut s’avérer totalement justifiée. En pareil cas, ce dont vous avez réellement besoin, c’est qu’Access mette automatiquement à jour toutes les lignes concernées en une seule et même opération. De cette manière, Access garantit l’exécution complète de la mise à jour afin d’éviter tout risque d’incohérence dans votre base de données, avec certaines lignes mises à jour et d’autres pas. C’est pour répondre à cet objectif qu’Access prend en charge l’option Mettre à jour en cascade les champs correspondants. Lorsque vous appliquez l’intégrité référentielle, que vous choisissez l’option Mettre à jour en cascade les champs correspondants, puis que vous mettez à jour une clé primaire, Access met automatiquement à jour tous les champs qui font référence à la clé primaire.
Il se peut également que vous ayez besoin de supprimer une ligne et tous ses enregistrements associés (p.ex., un enregistrement Expéditeur et toutes les commandes associées à cet expéditeur). C’est pourquoi Access prend en charge l’option Effacer en cascade les enregistrements correspondants. Lorsque vous appliquez l’intégrité référentielle, que vous choisissez l’option Effacer en cascade les enregistrements correspondants, puis que vous supprimez un enregistrement du côté de la clé primaire de la relation, Access supprime automatiquement tous les enregistrements qui font référence à la clé primaire.
Afficher les relations entre les tables
Pour afficher les relations entre les tables, cliquez sur Relations sous l’onglet Outils de base de données. La fenêtre Relations s’ouvre et affiche toutes les relations existantes. Si aucune relation entre tables n’a été définie et que vous ouvrez la fenêtre Relations pour la première fois, Access vous invite à ajouter une table ou une requête à cette fenêtre.
Ouvrir la fenêtre Relations
- Cliquez sur Fichier, puis sur Ouvrir.
- Sélectionnez et ouvrez la base de données.
- Sous l’onglet Outils de base de données, dans le groupe Relations, cliquez sur Relations.Si la base de données contient des relations, la fenêtre Relations apparaît. Si la base de données ne contient aucune relation et si vous ouvrez la fenêtre Relations pour la première fois, la boîte de dialogue Afficher la table apparaît. Cliquez sur Fermer pour fermer la boîte de dialogue.
- Sous l’onglet Création, dans le groupe Relations, cliquez sur Afficher toutes les relations.Toutes les relations définies dans la base de données s’affichent à l’écran. Notez que les tables masquées (tables pour lesquelles la case à cocher Masqué est activée dans la boîte de dialogue Propriétés) et leurs relations ne sont pas affichées, à moins que la case à cocher Afficher les objets masqués soit activée dans la boîte de dialogue Options de navigation.
Une relation entre tables est représentée dans la fenêtre Relations par une ligne de relation qui relie les tables. Une relation qui n’applique pas l’intégrité référentielle est reconnaissable à la présence d’un trait fin entre les champs communs prenant part à la relation. Lorsque vous sélectionnez la relation en cliquant sur le trait correspondant, celui-ci s’épaissit pour indiquer qu’il est sélectionné. Si vous appliquez l’intégrité référentielle à cette relation, le trait s’épaissit à chaque extrémité. En outre, le chiffre 1 s’affiche au-dessus de la section épaisse du trait d’un côté de la relation, alors que le symbole infini (∞) s’affiche au-dessus de la section épaisse du trait de l’autre côté.
Lorsque la fenêtre Relations est active, vous pouvez sélectionner l’une des commandes suivantes sur le ruban :
Sous l’onglet Création, dans le groupe Outils :
- Modifier des relations Ouvre la boîte de dialogue Modifier des relations. Lorsque vous sélectionnez une ligne de relation, vous pouvez cliquer sur Modifier des relations pour modifier la relation entre les tables. Vous pouvez également double-cliquer sur la ligne de relation.
- Effacer la mise en page Supprime l’affichage de toutes les tables et les relations dans la fenêtre Relations. Notez que cette commande ne masque que les tables et les relations ; elle ne les supprime pas.
- Rapport de relations Crée un rapport qui affiche les tables et les relations dans la base de données. Ce rapport n’affiche que les tables et les relations qui ne sont pas masquées dans la fenêtre Relations.
Sous l’onglet Création, dans le groupe Relations :
- Afficher la table Ouvre la boîte de dialogue Afficher la table afin que vous puissiez sélectionner des tables et des requêtes pour un affichage dans la fenêtre Relations.
- Masquer la table Masque la table sélectionnée dans la fenêtre Relations.
- Afficher les relations directes Affiche toutes les relations et les tables liées pour la table sélectionnée dans la fenêtre Relations, si elles ne sont pas déjà affichées.
- Toutes les relations Affiche dans la fenêtre Relations toutes les relations et les tables liées dans la base de données. Notez que les tables masquées (tables pour lesquelles la case à cocher Masqué est activée dans la boîte de dialogue Propriétés) et leurs relations ne sont pas affichées, à moins que la case à cocher Afficher les objets masqués soit activée dans la boîte de dialogue Options de navigation.
- Fermer Ferme la fenêtre Relations. Si vous avez apporté des modifications à la disposition de la fenêtre Relations, le système vous invite à les enregistrer.