formateur informatique

Relations entre les tables, exercice Access

Accueil  >  Bureautique  >  Access  >  Access Débutant  >  Relations entre les tables, exercice Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Relations entre les tables de la base de données

Ce neuvième exercice Access est le dernier sur la configuration des tables pour la construction de l'ossature de la base de données. Il est primordial que les informations soient découpées entre plusieurs tables afin d'éviter les répétitions. Et c'est ce que nous nous sommes attachés à confectionner. Mais dès lors, pour que ces données puissent être articulées entre elles, elles doivent être liées. Dans notre cas, sur les informations d'un client, nous devons pouvoir accéder à ses commandes. Et ces données sont placées dans une autre table. De même, à partir d'une commande, nous devons pouvoir obtenir le détail, comme la liste de tous les articles achetés. Bref, nous devons relier ces tables entre elles.

Source et présentation de la problématique
Pour aboutir cette configuration absolument fondamentale, nous devons réceptionner la base de données. Elle renferme tous les paramétrages essentiels que nous avons effectués au cours des exercices précédents. Les six tables de la base de données sont listées dans le volet des objets Access, sur la gauche de l'écran.
  • Cliquer droit sur la table Clients,
  • Puis, dans le menu contextuel, choisir Mode création,
Nous accédons ainsi à la vue en conception de la table. Nous y retrouvons les champs et leurs paramétrages. C'est dans cette vue, pour chacun des champs de chacune des tables, que nous avons défini les types de données. Mais nous avons aussi réglé leur taille au plus juste. Nous les avons formatés et avons construit des masques de saisie pour certains. Nous avons enfin ajouté des règles de validité pour contrôler la conformité de l'information insérée.

Paramétrage de table Access avec clé primaire, formats et masques de saisie

Le premier champ de cette table se nomme Client_id. Il s'agit du champ de la clé primaire. C'est ce que rappelle le symbole de la petite clé sur son étiquette de ligne. C'est lui qui identifie chaque client de façon unique. C'est donc lui qui doit servir à repérer ses achats dans la table Commandes.
  • Cliquer sur la croix de l'onglet pour fermer la table Clients,
  • Dans le volet, cliquer droit sur la table Commandes,
  • Dans le menu contextuel, choisir Mode création,
Clés primaire et étrangère dans la table Access des commandes des clients

Le champ Com_num est celui de la clé primaire. Il identifie donc chaque commande de façon unique. C'est lui qui permettra d'accéder au détail de la commande dans la table liée. Le champ juste en dessous se nomme Com_client. Son type de données est numérique comme celui de la clé primaire Client_id dans la table Clients. Et pour cause, ce champ doit servir de clé externe. En d'autres termes, il doit rappeler l'identifiant du client pour lequel l'enregistrement décrit la commande. C'est donc entre la clé primaire de la table Clients et cette clé externe que la première relation doit être bâtie.
  • Cliquer sur la croix de l'onglet pour fermer la table Commandes,
  • Dans le volet des objets Access, cliquer droit sur la table Detail_commandes,
  • Dans le menu contextuel, choisir Mode création,
Table Access détail commandes avec une clé primaire et deux clés étrangères pour relations avec commandes et articles

Cette table propose une clé primaire et deux clés externes. Elle doit en effet être liée à deux tables. La clé primaire se nomme Det_num. Elle identifie donc chaque détail de commande de façon unique. La première clé externe se nomme Det_com. Elle doit rappeler le numéro de commande issu de la table Commandes. Et ce numéro peut être répété plusieurs fois. Si le client a acheté plusieurs articles, la table Detail_commandes les énumère tous dans des enregistrements différents. Donc ce numéro permet de récupérer toutes les informations de la commande, qui elle-même est liée au client. Enfin, le champ Det_ref est lui aussi une clé étrangère. Il est typé comme un texte car il rappelle la référence de l'article acheté sur l'enregistrement en cours. Cette référence est exploitée comme clé primaire dans la table Produits. C'est donc sur ces deux champs que la relation doit être établie. Ainsi, nous pouvons remonter au niveau de détail du produit, comme sa désignation et son prix unitaire par exemple.
  • Fermer la table Detail_commandes en cliquant sur la croix de son onglet,
  • Dans le volet des objets Access, cliquer droit sur la table Produits,
  • Dans le menu contextuel, choisir Mode création,
En tête de liste, nous retrouvons en effet le champ produit_ref de la clé primaire. Il est bien typé comme un texte. De fait, il peut être exploité pour établir la relation dont nous parlions, avec la clé externe Det_ref de la table Detail_commandes.

Table Access des articles à acheter avec clé primaire pour relations avec les commandes des clients

Deux autres tables existent. La table Communes est indépendante. Nous l'exploiterons pour créer des listes déroulantes dépendantes. Il s'agira d'isoler les villes correspondant à un code postal. En revanche, la table Remises joue un rôle. Le code de la promotion doit intervenir dans la table Produits. Il est identifié par sa clé primaire Remise_id. Un champ du même type est prévu dans la table Produits. Il se nomme produit_code. Il doit donc servir de clé étrangère.
  • Fermer la table Produits,
Relier les tables entre elles
Les relations entre les tables d'une base de données sont donc fondamentales. Elles permettent d'accéder en cascade aux contenus liés. Elles contribuent à améliorer les performances globales. Mais aussi et surtout, elles préservent l'intégrité des données. Une fois qu'elles sont établies, il n'est plus possible de créer des enregistrements orphelins. Par exemple, il n'est pas possible d'attribuer une commande à un numéro de client n'étant pas référencé dans la table Clients. Enfin, elles apportent beaucoup de souplesse. Elles permettent les mises à jour et suppressions en cascade. Si vous supprimez un client obsolète, toutes ses informations dans les tables liées, sont éliminées en cascade. Ce mécanisme est fort précieux pour ne pas risquer de conserver des données inutiles. En outre, il permet de ne pas avoir à rechercher les informations dépendantes à éliminer.
  • Cliquer sur l'onglet Outils de base de données en haut de la fenêtre Access,
  • Dans la section Relations du ruban, cliquer sur le bouton Relations,
  • Dans la fenêtre qui apparaît, sélectionner toutes les tables sauf la table Communes,
Sélectionner les tables Access pour établir les relations
  • Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Nous basculons dans une vue représentant schématiquement chacune des tables avec ses champs. Vous remarquez que chaque champ de la clé primaire est accompagné du symbole de la clé. Ce repère visuel est important pour créer les liaisons. Il convient de réorganiser ces tables en hauteur pour mettre en valeur la hiérarchie.

Déplacer les tables schématisées selon la hiérarchie dans éditeur de relations Access

En effet, la table Commandes dépend de la table Clients. La table Detail_commandes dépend de la table Commandes.
  • Cliquer et glisser le champ de la clé primaire Client_id de la table Clients sur le champ de la clé externe Com_client de la table Commandes,
Instantanément, une boîte de dialogue apparaît. Elle matérialise le lien que nous venons d'établir entre ces deux champs.
  • Cocher la case : Appliquer l'intégrité référentielle,
  • Puis, cocher la case : Mettre à jour en cascade les champs correspondants,
  • Ensuite, cocher la case : Effacer en cascade les enregistrements correspondants,
Relation entre deux tables Access par clés primaire et externe avec intégrité référentielle

Ces actions résument le mécanisme que nous avons expliqué précédemment. L'intégrité référentielle porte bien son nom. Elle est destinée à préserver l'intégrité des données sur la base des références représentées par les clés. Elle empêche la création de ces fameux enregistrements orphelins. La mise à jour et la suppression en cascade parlent d'elles-mêmes. Comme nous l'évoquions, si un client est supprimé, toutes les traces liées dans les tables dépendantes sont automatiquement éliminées.
  • Cliquer sur le bouton Créer pour valider cette première relation,
Représentation schématique et graphique de la relation entre deux tables de base de données Access

Cette liaison apparaît désormais matérialisée graphiquement dans l'éditeur de relation. Une jointure s'opère entre le champ de la clé primaire Client_id et le champ de la clé externe Com_client. Le symbole du chiffre 1 accompagne le champ de la clé primaire. Le symbole infini accompagne celui de la clé externe. Ce schéma est sans équivoque. Il rappelle qu'un client peut passer autant de commandes qu'il le souhaite. Son numéro peut donc être répété indéfiniment dans la table Commandes. Inversement, une commande correspond à un seul client.

De la même façon, nous devons désormais établir les relations entre les autres tables.
  • Glisser le champ de la clé primaire Com_num de la table Commandes sur le champ de la clé externe Det_com de la table Detail_commandes,
  • Dans la boîte de dialogue, Cocher la case : Appliquer l'intégrité référentielle,
  • Puis, cocher la case : Mettre à jour en cascade les champs correspondants,
  • Ensuite, cocher la case : Effacer en cascade les enregistrements correspondants,
  • Enfin, cliquer sur le bouton Créer pour établir la liaison,
La même symbolique schématise désormais la relation existant entre la table Commandes et la table Detail_commandes. Une commande peut en effet être composée de plusieurs articles achetés. Sur chaque enregistrement de la table dépendante, ils seront reliés au numéro de commandede la table parente.
  • Glisser le champ de la clé primaire produit_ref de la table Produits sur le champ de la clé externe Det_ref de la table Detail_commandes,
  • Dans la boîte de dialogue, Cocher les trois cases et cliquer sur le bouton Créer,
Une même référence article peut être achetée indéfiniment, expliquant cette relation entre les deux tables.
  • Enfin, glisser le champ de la clé primaire Remise_id de la table Remises sur le champ de la clé externe produit_code de la table Produits,
  • Dans la boîte de dialogue, Cocher les trois cases et cliquer sur le bouton Créer,
Un même code promotionnel peut effectivement être appliqué sur n'importe quel article, donc une infinité de fois.

Relations entre toutes les tables de la base de données Access pour intégrité référentielle et mises à jour en cascade

Toutes les relations sont désormais établies. Ces dépendances vont sécuriser les données de la base. Notez que la table Detail_commandes dépend de deux tables.
  • Enregistrer les relations (CTRL +S),
  • Dans le ruban Contextuel Créer, cliquer sur le bouton Fermer,
  • Dans le volet des objets Access, sélectionner la table Detail_commandes,
  • En haut de la fenêtre Access, cliquer sur l'onglet Outils de base de données,
  • Dans la section Relations du ruban, cliquer sur le bouton Dépendances d'objet,
Visualiser dépendances objets Access pour notamment matérialiser relations entre tables

Un volet apparaît sur la droite de l'interface. Il résume les dépendances existant entre les différents objets Access. Pour l'instant, notre base de données n'est constituée que de tables. Mais comme vous le remarquez, cet outil montre la relation de dépendance entre la table Detail_commandes et les tables Commandes et Produits.

Si vous déployez l'une et l'autre, vous accédez aux dépendances respectives. Cette fonctionnalité est intéressante pour rappeler la construction de la base et son mode de fonctionnement. Rappelez-vous d'un principe fondamental : Avant de chercher à établir les relations, l'information doit être décomposée en plusieurs tables. Et dans chacune, la clé primaire et la clé externe doivent être prévues.

Intégrité des données
Il est temps de tester l'impact de ces relations sur le fonctionnement de notre base de données.
  • Cliquer sur la croix du volet Dépendances d'objet pour le fermer,
  • Dans le volet des objets Access, double cliquer sur la table Clients,
Comme le champ Client_nom l'indique, il s'agissait d'un essai que nous n'avions pas supprimé.
  • Cliquer droit sur son étiquette de ligne,
  • Dans le menu contextuel, choisir Supprimer l'enregistrement,
  • Puis, cliquer sur le bouton Oui du message de confirmation qui apparaît,
Supprimer un enregistrement de table Access

Désormais, sur la dernière ligne vide, nous proposons de créer un nouveau client.
  • Dans le champ Client_civilite, choisir Monsieur avec la liste déroulante,
  • Dans le champ Client_nom, saisir : Taha,
  • Dans le champ Client_prenom, saisir : Rachid,
  • Dans le champ Client_dep, taper : 06000,
  • Dans le champ Client_ville, saisir : Nice,
  • Puis, cliquer sur la ligne vide du dessous pour valider la création de l'enregistrement,
En raison des règles de validité que nous avons posées dans un exercice précédent, nous avons été contraints de renseigner toutes les informations. Et c'est tant mieux.

Ecart numéro auto-incrémenté dans table Access suite à création nouveau client

Comme vous le constatez, le numéro auto-incrémenté de la clé primaire n'est pas dans la suite logique du précédent. Nous avions réalisé quelques tests de création d'enregistrements dans les précédents exercices. Et les numéros attribués ne le sont plus, pour des raisons de sécurité. Nous passons donc du 34 au 45.
  • Cliquer sur la croix de l'onglet pour fermer la table Clients,
  • Dans le volet des objets Access, double cliquer sur la table Commandes,
Cette dernière est vide pour l'instant. En effet, aucune commande n'a encore été passée. Nous proposons de créer la première et de l'attacher à un client. Naturellement, le champ de la clé primaire n'est pas à renseigner.
  • Dans le champ Com_client, saisir le numéro 38,
  • Enfoncer la touche Tab pour sélectionner le champ Com_date,
  • Enfoncer de nouveau la touche Tab pour conserver la date du jour proposée par défaut,
  • Dans le champ Com_montant, saisir : 1200,
  • Puis, enfoncer de nouveau la touche Tab du clavier pour valider l'enregistrement,
Création commande dépendante refusée par intégrité référentielle car numéro de client non trouvé

Instantanément et comme vous le remarquez, la règle de l'intégrité référentielle que nous avons cochée, se déclenche. Elle empêche la création d'une commande attachée à un client n'existant pas dans la table Clients. Nous l'avons remarqué en effet, la clé primaire saute du numéro 34 au 45, dans la table Clients. Il en serait de même si nous créions un détail de commande attaché à un numéro de commande non référencé. La création serait également refusée si nous renseignions un détail de commande sur la base d'un code article non archivé dans la table Produits. Ces règles de sécurité sont donc fondamentales dans le fonctionnement d'un gestionnaire de bases de données comme Access.
  • Cliquer sur le bouton Ok de l'alerte Access,
  • Dans le champ Com_client, remplacer le numéro 38 par 45,
  • Puis, cliquer sur la ligne vide du dessous pour valider l'enregistrement,
Cette fois, aucune alerte ne se déclenche. En effet, l'identifiant 45 correspondant au dernier client que nous avons créé. Tel que le dictent les relations établies entre les tables, nous avons donc le droit de lui affecter une commande.
  • Cliquer sur la croix de l'onglet pour fermer la table Commandes,
  • Dans le volet des objets Access, double cliquer sur la table Clients,
  • Atteindre le dernier enregistrement en queue de liste,
  • Cliquer droit sur l'étiquette de ligne du client au numéro 45,
  • Dans le menu contextuel, choisir Supprimer l'enregistrement,
  • Puis, valider l'alerte en cliquant sur le bouton Oui,
  • Fermer la table Clients et ouvrir la table Commandes,
Comme vous le constatez, cette dernière est vide bien que nous ne soyons pas intervenus dessus. Grâce aux relations entre les tables, la suppression du client a engagé la suppression de toutes ses dépendances.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn