Comment définir les relations entre les tables dans une base de données Access
Numéro de l’article d’origine dans la base de connaissances : 304466
Remarque
Novice : requiert la connaissance de lʼinterface utilisateur sur les ordinateurs mono-utilisateur. Cet article sʼapplique uniquement à une base de données Microsoft Access (.mdb ou .accdb).
Résumé
Cet article explique comment définir les relations dans une base de données Microsoft Access. Il contient les sujets suivants :
- Que sont les relations de table ?
- Types de relations de table
- Relations un-à-plusieurs
- Relations plusieurs-à-plusieurs
- Relations un-à-un
- Comment définir les relations entre les tables
- Comment définir une relation un-à-plusieurs ou un-à-un
- Définition dʼune relation plusieurs-à-plusieurs
- intégrité référentielle
- Mises à jour et suppressions en cascade
- Types de jointures
Que sont les relations de table ?
Dans une base de données relationnelle, les relations vous permettent dʼempêcher la redondance des données. Par exemple, si vous concevez une base de données qui effectuera le suivi des informations sur des livres, vous pouvez avoir une table nommée « Titres » qui stocke des informations sur chaque livre, telles que le titre, la date de publication et lʼéditeur du livre. Vous pouvez également stocker des informations concernant lʼéditeur, telles que son numéro de téléphone, son adresse et son code postal. Si vous stockez toutes ces informations dans la table « Titres », le numéro de téléphone de lʼéditeur est dupliqué à chaque titre imprimé par lʼéditeur.
Une meilleure solution consiste à ne stocker les informations de l’éditeur qu’une seule fois, dans un tableau séparé que nous appellerons « Éditeurs ». Vous pouvez ensuite placer un pointeur dans la table « Titres » qui fait référence à une entrée de la table « Éditeurs ».
Pour vous assurer que vos données restent synchronisées, vous pouvez appliquer lʼintégrité référentielle entre les tables. Les relations dʼintégrité référentielle permettent de sʼassurer que les informations dʼun tableau correspondent aux informations dʼun autre. Par exemple, chaque titre de la table « Titres » doit être associé à un éditeur spécifique de la table « Éditeurs ». Un titre dʼun éditeur qui nʼexiste pas dans la base de données ne peut pas être ajouté à celle-ci.
Les relations logiques dans une base de données vous permettent dʼinterroger efficacement des données et de créer des rapports.
Types de relations de table
Une relation fonctionne en faisant correspondre les données dans des colonnes clés, généralement des colonnes (ou des champs) qui ont le même nom dans les deux tables. Dans la plupart des cas, la relation connecte la clé primaire, ou la colonne dʼidentificateur unique pour chaque ligne, dʼune table à un champ dʼune autre table. La colonne de l’autre tableau est connue sous le nom de « clé étrangère ». Par exemple, si vous souhaitez suivre les ventes de chaque titre de livre, vous créez une relation entre la colonne de clé primaire (appelons-la title_ID) dans la table « Titres » et une colonne dans la table « Ventes » nommée title_ID. La colonne ID_titre de la table « Ventes » est la clé étrangère.
Il existe trois types de relations entre les tables. Le type de relation créé dépend de la façon dont les colonnes associées sont définies.
Relations un-à-plusieurs
Une relation un-à-plusieurs est le type de relation le plus courant. Dans ce type de relation, une ligne de la table A peut correspondre à plusieurs lignes de la table B. Toutefois, une ligne de la table B ne peut correspondre quʼà une seule ligne de la table A. Par exemple, les tables « Éditeurs » et « Titres » ont une relation un-à-plusieurs. Cela signifie que chaque éditeur publie de nombreux titres. Mais que chaque titre nʼest publié que par un seul éditeur.
Une relation un-à-plusieurs est créée si une seule des colonnes associées est une clé primaire ou possède une contrainte unique.
Dans la fenêtre des relations dʼAccess, le côté clé primaire dʼune relation un-à-plusieurs est indiqué par le chiffre 1. Le côté clé étrangère dʼune relation est indiqué par un symbole dʼinfini.
Relations plusieurs-à-plusieurs
Dans une relation plusieurs-à-plusieurs, une ligne de la table A peut correspondre à plusieurs lignes de la table B, et vice versa. Une telle relation est créée en définissant une troisième table appelée table de jonction. La clé primaire de la table de jonction se compose des clés étrangères de la table A et de la table B. Par exemple, la table « Auteurs » et la table « Titres » possèdent une relation plusieurs-à-plusieurs qui est définie par une relation un-à-plusieurs entre chacune de ces tables et la table « TitreAuteurs ». La clé primaire de la table « TitreAuteurs » est la combinaison de la colonne ID_au (la clé primaire de la table « Auteurs ») avec la colonne ID_titre (la clé primaire de la table « Titres »).
Relations un-à-un
Dans une relation un-à-un, une ligne de la table A ne peut pas correspondre à plus dʼune ligne de la table B, et vice versa. Une relation un-à-un est créée si les deux colonnes associées sont des clés primaires ou ont des contraintes uniques.
Ce type de relation nʼest pas courant, car la plupart des informations associées de cette manière se trouvent dans une seule table. Vous pouvez utiliser une relation un-à-un pour prendre les mesures suivantes :
- Divisez une table avec plusieurs colonnes.
- Isolez une partie dʼune table pour des raisons de sécurité.
- Stockez les données de courte durée qui peuvent être facilement effacées en supprimant la table.
- Stockez les informations qui sʼappliquent uniquement à un sous-ensemble de la table principale.
Dans Access, le côté clé primaire dʼune relation un-à-un est indiqué par un symbole en forme de clé. Le côté clé étrangère est également indiqué par un symbole en forme de clé.
Comment définir les relations entre les tables
Lorsque vous créez une relation entre les tables, les champs correspondants ne doivent pas nécessairement avoir les mêmes noms. Toutefois, les champs correspondants doivent comporter le même type de données, sauf si le champ de clé primaire est un champ NuméroAuto. Vous ne pouvez faire correspondre un champ NuméroAuto avec un champ numérique que si le paramètre theFieldSizeproperty est le même pour les deux champs correspondants. Par exemple, vous pouvez faire correspondre un champ NuméroAuto avec un champ numérique si le paramètre theFieldSizeproperty des deux champs est un entier long. Même lorsque les deux champs correspondants sont des champs numériques, la valeur sameFieldSizeproperty doit être la même.
Comment définir une relation un-à-plusieurs ou un-à-un
Pour créer une relation un-à-plusieurs ou une relation un-à-un, procédez comme suit :
Fermez toutes les tables. Vous ne pouvez pas créer ou modifier des relations entre des tables ouvertes.
Dans Access 2002 et Access 2003, procédez comme suit :
- Appuyez sur F11 pour basculer vers la fenêtre Base de données.
- Dans le menu Outils, cliquez sur Relations.
Dans Access 2007, Access 2010 ou Access 2013, cliquez sur Relations dans le groupe Afficher/Masquer sous lʼonglet Outils de base de données.
Si vous nʼavez pas encore défini de relations dans votre base de données, la boîte de dialogue Afficher la table sʼaffiche automatiquement. Si vous souhaitez ajouter les tables à mettre en relation, mais que la boîte de dialogue Afficher la table nʼapparaît pas, cliquez sur Afficher la table dans le menu Relations.
Double-cliquez sur les noms des tables que vous souhaitez mettre en relation, puis fermez la boîte de dialogue Afficher la table. Pour créer une relation entre une table et elle-même, ajoutez cette table deux fois.
Faites glisser le champ à mettre en relation dʼune table vers le champ correspondant de lʼautre table. Pour faire glisser plusieurs champs, appuyez sur Ctrl, cliquez sur chaque champ, puis faites-les glisser.
Dans la plupart des cas, vous devez faire glisser le champ de clé primaire (ce champ est affiché en gras) dʼune table vers un champ similaire (ce champ porte souvent le même nom) qui est appelé clé étrangère dans lʼautre table.
La boîte de dialogue Modifier les relations sʼaffiche. Assurez-vous que les noms de champs affichés dans les deux colonnes sont corrects. Vous pouvez modifier les noms si nécessaire.
Définissez les options de relation si nécessaire. Si vous avez besoin dʼinformations sur un élément spécifique de la boîte de dialogue Modifier les relations, cliquez sur le bouton en forme de point dʼinterrogation, puis sur lʼélément en question. (Ces options seront expliquées en profondeur ultérieurement dans cet article.)
Cliquez sur Créer pour créer la relation.
Répétez les étapes 4 à 7 pour chaque paire de tables à mettre en relation.
Lorsque vous fermez la boîte de dialogue Modifier les relations, Access vous demande si vous souhaitez enregistrer la disposition. Que vous sauvegardiez ou non la disposition, les relations que vous créez sont enregistrées dans la base de données.
Remarque
Vous pouvez créer des relations non seulement dans les tables, mais également dans les requêtes. Toutefois, lʼintégrité référentielle nʼest pas appliquée avec les requêtes.
Définition dʼune relation plusieurs-à-plusieurs
Pour créer une relation plusieurs-à-plusieurs, procédez comme suit :
Créez les deux tables qui auront une relation plusieurs-à-plusieurs.
Créez une troisième table. Il sʼagit de la table de jonction. Dans la table de jonction, ajoutez de nouveaux champs qui ont les mêmes définitions que les champs de clé primaire de chaque table que vous avez créée à lʼétape 1. Dans la table de jonction, les champs de clé primaire fonctionnent comme des clés étrangères. Vous pouvez ajouter dʼautres champs à la table de jonction, comme pour toutes les autres tables.
Dans la table de jonction, définissez la clé primaire pour inclure les champs de clé primaire des deux autres tables. Par exemple, dans une table de jonction « TitreAuteurs », la clé primaire est composé des champs OrderID et ProductID.
Remarque
Pour créer une clé primaire, procédez comme suit :
Ouvrez une table en mode création.
Sélectionnez le ou les champs que vous souhaitez définir comme clé primaire. Pour sélectionner un champ, cliquez sur le sélecteur de ligne du champ souhaité. Pour sélectionner plusieurs champs, maintenez la touche Ctrl enfoncée, puis cliquez sur le sélecteur de ligne correspondant à chaque champ.
Dans Access 2002 ou Access 2003, cliquez sur Clé primaire dans la barre dʼoutils.
Dans Access 2007, cliquez sur Clé primaire dans le groupe Outils sous lʼonglet Création.
Remarque
Si vous souhaitez que lʼordre des champs dʼune clé primaire à plusieurs champs soit différent de lʼordre de ces champs dans la table, cliquez sur Index dans la barre dʼoutils pour afficher la boîte de dialogue Index, puis réorganisez les noms des champs de lʼindex nommé PrimaryKey.
Définissez une relation un-à-plusieurs entre chaque table primaire et la table de jonction.
intégrité référentielle
Lʼintégrité référentielle est un système de règles utilisé par Access pour sʼassurer que les relations entre les enregistrements des tables correspondantes sont valides, et que vous ne supprimez ou ne modifiez pas accidentellement les données correspondantes. Vous pouvez définir lʼintégrité référentielle lorsque toutes les conditions suivantes sont vraies :
- Le champ correspondant de la table primaire est une clé primaire ou possède un index unique.
- Les champs correspondants possèdent le même type de données. Il existe deux exceptions à ce comportement. Un champ NuméroAuto peut être mis en relation avec un champ numérique dont la propriété a pour valeur
FieldSize
Entier long, et un champ NuméroAuto dont la propriété a pour valeurFieldSize
ID de réplication peut être mis en relation avec un champ numérique dont la propriété a pour valeurFieldSize
ID de réplication. - Les deux tables appartiennent à la même base de données Access. Sʼil sʼagit de tables liées, elles doivent être au format Access et vous devez ouvrir la base de données dans laquelle elles sont stockées pour définir lʼintégrité référentielle. L’intégrité référentielle ne peut pas être appliquée pour les tables liées provenant de bases de données dans dʼautres formats.
Les règles suivantes sʼappliquent lorsque vous utilisez lʼintégrité référentielle :
- Vous ne pouvez pas saisir dans le champ de clé étrangère de la table associée une valeur qui nʼexiste pas dans la clé primaire de la table primaire. Toutefois, vous pouvez entrer une valeur Null dans la clé étrangère. Cela indique que les enregistrements ne sont pas liés. Par exemple, il est impossible dʼattribuer une commande à un client qui nʼexiste pas. Toutefois, il est possible dʼattribuer une commande à personne en particulier en saisissant une valeur Null dans le champ CustomerID.
- Vous ne pouvez pas supprimer un enregistrement dʼune table primaire si des enregistrements correspondants existent dans une table associée. Par exemple, vous ne pouvez pas supprimer un employé de la table « Employés » sʼil existe des commandes affectées à cet employé dans la table « Commandes ».
- Vous ne pouvez pas modifier une valeur de clé primaire dans la table primaire si cet enregistrement possède des enregistrements associés. Par exemple, vous ne pouvez pas modifier lʼID dʼun employé dans la table « Employés » si des commandes sont affectées à cet employé dans la table « Commandes ».
Mises à jour et suppressions en cascade
Pour les relations dans lesquelles l’intégrité référentielle est appliquée, vous pouvez indiquer si vous souhaitez quʼAccess effectue automatiquement une mise à jour ou une suppression en cascade des enregistrements associés. Si ces options sont définies, les opérations de suppression et de mise à jour, qui sont normalement empêchées par les règles dʼintégrité référentielle, sont activées. Lorsque vous supprimez des enregistrements ou modifiez des valeurs de clé primaire dans une table primaire, Access effectue les modifications nécessaires aux tables associées pour conserver lʼintégrité référentielle.
Si vous cochez la case Mettre à jour en cascade les champs correspondants lorsque vous définissez une relation, chaque fois que vous modifiez la clé primaire dʼun enregistrement de la table primaire, Microsoft Access met automatiquement à jour la clé primaire avec la nouvelle valeur dans tous les enregistrements correspondants. Par exemple, si vous modifiez lʼID dʼun client dans la table « Clients », le champ CustomerID de la table « Commandes » est automatiquement mis à jour pour chacune des commandes de ce client afin que la relation ne soit pas rompue. Access procède aux mises à jour en cascade sans afficher de message.
Remarque
Si la clé primaire de la table primaire est un champ NuméroAuto, la case à cocher Mettre à jour en cascade les champs correspondants nʼa aucun effet, car vous ne pouvez pas modifier la valeur dʼun champ NuméroAuto.
Si vous cochez la case Supprimer en cascade les enregistrements correspondants lorsque vous définissez une relation, à chaque fois que vous supprimez des enregistrements dans la table primaire, Access supprime automatiquement les enregistrements correspondants dans la table associée. Par exemple, si vous supprimez un client de la table « Clients », toutes les commandes du client sont automatiquement supprimées de la table « Commandes ». (Cela inclut les enregistrements de la table « Détails des commandes » correspondant aux enregistrements « Commandes »). Lorsque vous supprimez des enregistrements dʼun formulaire ou dʼune feuille de données lorsque la case à cocher Supprimer en cascade les enregistrements correspondants est sélectionnée, Access vous avertit que les enregistrements correspondants peuvent également être supprimés. Cependant, si vous supprimez les enregistrements à lʼaide dʼune requête Suppression, Access les supprime automatiquement des tables correspondantes sans afficher dʼavertissement.
Types de jointures
Il existe trois types de jointures : Ils sont affichés dans la capture dʼécran suivante :
Lʼoption 1 définit une jointure interne. Une jointure interne est une jointure dans laquelle les enregistrements de deux tables sont combinés dans les résultats dʼune requête, mais uniquement si les valeurs des champs joints répondent à une condition bien précise. Dans une requête, la jointure par défaut est une jointure interne, qui sélectionne les enregistrements uniquement si les valeurs des champs joints correspondent.
Lʼoption 2 définit une jointure externe gauche. Une jointure externe gauche est une jointure dans laquelle tous les enregistrements du côté gauche de lʼopération LEFT JOIN de lʼinstruction SQL de la requête sont ajoutés aux résultats de celle-ci, même sʼil nʼexiste aucune valeur correspondante dans le champ joint de la table du côté droit.
Lʼoption 3 définit une jointure externe droite. Une jointure externe droite est une jointure dans laquelle tous les enregistrements du côté droit de lʼopération RIGHT JOIN de lʼinstruction SQL de la requête sont ajoutés aux résultats de celle-ci, même sʼil nʼexiste aucune valeur correspondante dans le champ joint de la table du côté gauche.