Je ne vais pas ici expliquer les bases des relations, car ce n’est gui?re l’optique, mais les differentes relations possible entre des tables. des precisions basiques seront donnees dans mon cours en ligne, a ma lecon 16 (payant).
Notre prerequis pour suivre ce didacticiel est de savoir bien un tantinet jouer avec les relations avec le menu Outils/Relations
Les exemples cites dans ce didacticiel
se reposent sur votre base de precisions.
Exemple 1 : Le plus frequent, la relation 1 a plusieurs
Ca, c’est vraiment Notre relation la plus courante.
Imaginez la table Rel1_T_Client avec 2 champs : NomClient et PaysOrigine. NomClient reste en cle primaire. Bon, ce n’est gui?re une agreable idee de mettre NomClient en Cle primaire puisque dans le quotidien courante, plusieurs clients peuvent avoir le aussi nom, mais c’est pour simplifier.
Nous avons un 2eme champ PaysOrigine qui n’est jamais en cle primaire, forcement, puisqu’il va y avoir diverses fois le meme (2 fois Belgique dans notre cas).
L’autre table s’appelle Rel1_T_Pays, et ne inclut qu’un seul champ Pays, en cle primaire (oui, une telle fois, il ne est en mesure de jamais y avoir 2 fois le meme pays). Constatez que Mes champs Pays et PaysOrigine que nous allons lier ensemble ne portent jamais le meme nom, cela ne gene en que dalle le mecanisme relationnel..
On peut beaucoup evidemment creer une liste deroulante dans la table Rel1_T_Client, sur le champ PaysOrigine, qui se basera via le champ Pays de Rel1_T_Pays. Je ne m’appesantis nullement via ces listes pour rester vraiment au sein d’ cette histoire de relations pure et dure.
On va pouvoir donc avoir votre client qui n’a aucun pays (Daniel), et des clients qui ont le meme pays (Alice et Charles). MAIS, il sera impossible de dire que Daniel vient du Chili Prenons un exemple, car le Chili n’existe pas dans Rel1_T_Pays.
C’est dans Outils/Relations que nous allons faire glisser PaysOrigine de Rel1_T_Client concernant Pays de Rel1_T_Pays. (Dans un sens ou dans l’autre, aucune importance)
Et nous obtenons :
Les champs en gras NomClient et Pays paraissent simplement les cles primaires. Et le petit 1 et le 8 couche (signe qui veut dire “Infini”) seront la preuve que l’integrite referentielle a bien ete appliquee. Si nous avions eu de la clienti?le qui provenaient du Chili notamment, c’est a penser lorsqu’il y avait “Chili” indique pour un des clients, alors, Access n’aurait jamais accepte de faire l’integrite referentielle.
Cela va y avoir d’autres soucis, comme le fait de ne point fermer une table avant d’aller dans les relations, qui provoque des erreurs, mais a nouveau, referez-vous a mon cours Afin de des renseignements plus basiques.
Exemple 2 : une meme table se rattache a plusieurs champs, de 1 a plusieurs
Ce 2eme exemple ressemble enormement au premier, mais il y a cette fois deux champs qui demandent a etre rattaches a une seule table externe :
Nous avons votre fois un champ PaysOrigine et un champ PaysHabitation.
Vous connaissez quoi ? ca ne pose gui?re vraiment de probleme ! Dans outils/Relations, il suffira d’ajouter 2 fois Rel2_T_Pays, comme ceci :
J’INSISTE : Rel2_T_Pays _1 n’est PAS une copie en table Rel2_T_Pays ! C’est simplement la maniere d’Access de preciser que la meme table reste utilisee deux fois.
Exemple 3 : la relation de 1 a 1
La relation 1 a 1 reste vraiment plus rare que la relation 1 a diverses. C’est meme possible que vous n’en ayiez jamais besoin. Mais Il semble beaucoup de savoir a quoi elle peut servir !
Saviez-vous qu’Access ne gere nullement un nombre illimite de champs ? Eh non ! A partir de la centaine de champs, vous devez s’attendre a votre que celui-ci vous penser que la table comporte de trop nombreux champs ! Ca vous interesse, les limites d’Access ? Cliquez ici !
Imaginez que vous avez une table absolument gigantesque gerant notamment l’etat de patient d’un hopital. Il y aura bien entendu son nom, le age, le poids, puis son taux de cholesterol, de glycemie, ainsi, ensuite son nombre de globules rouges, blancs, machins bidules, trucs. bref, je ne suis nullement medecin, mais je peux imaginer qu’on a besoin de 200 renseignements plusieurs pour un meme patient. Alors donc, comme vous n’arriverez jamais a mettre 200 champs dans une aussi table, vous creerez deux tables, qui seront liees de 1 a 1.
Vous comprenez Le concept ? Bon, pour ne pas nous attarcder dans le milieu medical, nous allons prendre un exemple tout bete : Nous allons coder une table avec les precisions generales de la clienti?le, et une 2eme table avec les donnees Telecom (portable, fax, e-mail, . )
C’est reellement important que nos deux champs lies (Ici NomClient et NomClient) soient en cle primaire, sinon, si l’un des deux ne l’est pas, ca ne fera nullement une relation 1 a 1 mais 1 a diverses.
ATTENTION : Normalement, le sens dans lequel vous tirez un champ pour aller vers l’autre n’a aucune importance. En tout cas pour bien ce qui concerne des champs de 1 a diverses. Mais dans le cas des champs relies de 1 a 1, ca A VRAIMENT de l’importance. Il convient beaucoup tirer en table principale (ici Rel3_T_Client) VERS la ou des autres tables liees de 1 a 1 (ici Rel3_T_ClientTelecom).
La raison en reste que tel les deux tables sont liees avec integrite referentielle, on doit donc qu’un client qui existe dans une table doit exister dans l’autre. Mais dans le contexte d’un NOUVEAU client, De quelle fai§on pourrait-il etre lie puisque le temps de le creer au sein d’ une table, il n’existe nullement dans l’autre, vous comprenez ?
Si je cree Francois tel nouveau client dans Rel3_T_Client, moyen que je ferme la table, ainsi, que j’aie le rajouter dans Rel3_T_:Telecom, Access va hurler : “He ! Vous ne pouvez nullement rajouter Francois dans la toute premiere table, puisqu’il n’existe gui?re dans la 2eme !” Et reciproquement !
Et on fera comment aussi .
Eh bien, en faisant bien gaffe de tirer les champs de la table principale vers l’autre et pas l’inverse, vous POUVEZ aussi creer 1 nouveau client au sein d’ Rel3_T_Client sans pour autant que celui-ci y ait de relation avec l’autre table Rel3_T_Telecom. C’est d’ailleurs de que j’ai fera.
NEANMOINS, vous ne pouvez Manque creer de nouveau client dans Rel3_T_Telecom avant de l’avoir cree dans Rel3_T_Client.
A part ca, ne creez aucun tables multiples “pour faire joli” ou pour la jouer style genre “Je sais se servir de des relations 1 a 1”. Tant que vous pourrez tout stocker dans une meme table, ca facilite https://datingmentor.org/fr/seeking-arrangement-review/ les choses. d’autant que vous pouvez creer des requetes qui affichent tels ou tels champs.
Exemple 4 : la relation sans integrite referentielle
On peut dire de la maniere generale que “normalement”, l’ensemble des tables de la base de precisions paraissent reliees “1 a diverses”, les unes au milieu des autres. Les relations 1 a 1 paraissent rares.
Les relations sans integrite referentielle pourront se Realiser n’importe comment : vous pouvez tirez n’importe quel champ de chaque table, aussi si leur type de donnees est divers, de l’instant que vous ne cochez pas “integrite referentielle”. Quand vous creez une liste deroulante basee via une nouvelle table, a Notre fin de l’assistant, il vous devoile “Voulez-vous que les relations soient creees ?”. Si vous repondez Oui, vous aurez une relation sans integrite referentielle.
Si vous entrez dans une base de donnees dans laquelle vous constatez que la quasi totalite des tables sont liees les unes aux autres sans integrite, vous pourrez etre presque certain qu’elle fut creee par un quidam qui ne connait jamais le fonctionnement des relations.
Il est toutefois des cas ou 2 tables ont interet a etre reliees sans integrite referentielle.
Imaginons une table Rel4_T_Client, avec le nom de l’acheteur, ainsi, sa ville de naissance qui est une liste deroulante qui va puiser les precisions dans Rel4_T_Ville :
Bon nombre de gens proviennent de la vilel Suisse, mais souvent, il y en a votre qui vient d’une ville francaise, voire italienne ou enfin de toute ville de l’univers.