Appliquer l'intégrité référentielle


Créez une relation entre Pays et PaysOrigine (Peu importe que vous glissiez la souris de T_Pays à T_Client ou l'inverse)
Une fois dans cette boîte de dialogue, tout l'intérêt réside dans la coche de la case Appliquer l'intégrité référentielle
Intégrité Référentielle ! En voilà un mot barbare ! C'est un peu comme le mariage, ou chacun des époux se jure loyauté et fidélité : Ils doivent être intègres. Eh bien, ici, c'est chacune des deux tables qui se jure loyauté et fidélité. En bref, T_Client jure à T_Pays qu'elle ne contiendra jamais de PaysOrigine absent de T_Pays. Par exemple, si Argentine n'existe pas dans T_Pays, T_Client s'engage à ne jamais avoir de client dont PaysOrigine est Argentine.
Evidemment, dans le cas d'un vrai mariage, ça ferait mauvais genre de se jurer de s'appliquer l'intégrité référentielle jusqu'à ce que la mort nous sépare .
Inutile de dire qu'on n'est pas sorti de l'auberge avec nos pays qui ne correspondent pas entre les deux tables (à part France)
Faites-le, et cliquez sur Créer. Vous êtes gratifié d'un message d'erreur aussi abscons que d'habitude !
Ca veut simplement dire que la relation ne peut pas être créée si votre table est ouverte. Cliquez sur OK, puis sur Annuler :
Fermez T_Pays, et réessayez de créer la même relation de PaysOrigine à Pays. re-cochez Appliquer l'intégrité référentielle, et cliquez à nouveau sur OK :

Clé primaire obligatoire pour l'intégrité référentielle

Ah ! Voici un autre message d'erreur :
Il nous informe qu'il n'est pas possible de créer l'intégrité référentielle à cause d'un "index unique introuvable". En fait, c'est à cause de la clé primaire que vous avez enlevée dans Pays de T_Pays. Pour appliquer l'intégrité référentielle, cette clé primaire est indispensable, et en fait c'est logique !
Vous vous rappelez qu'une clé primaire empêche les doublons : du coup, si nous avons un client dont nous avons choisi France comme PaysOrigine, comment Access pourrait-il deviner si vous parlez du premier France, ou du 2ème France que vous avez entré tout à l'heure ? Il doit savoir !
Du coup, vous devez remettre la clé primaire sur Pays de T_Pays, mais vous ne pourrez pas le faire tant que vous n'aurez pas supprimé le 2ème France ! Voyez comme l'intégrité référentielle vous "oblige" à faire le ménage ? Faites-le : supprimez le 2ème France.
Une fois que vous avez mis la clé primaire sur Pays de T_Pays et que vous avez refermé T_Pays, revenez dans les relations. Constatez qu'une petite clé est apparue à côté du champ :  , et, encore une fois (oui, c'est lassant, mais je veux vous montrer toutes les erreurs possibles), vous créez la relation entre Pays de T_Pays et PaysOrigine de T_Client, avec l'intégrité référentielle.

Erreur de non correspondance


Et voici la dernière erreur, qui a sans doute la palme du message d'erreur le plus long ! N'essayez pas de le comprendre, ou alors, prenez une aspirine avant :
Même si nous avions un million de clients, dont 999'999 avaient un PaysOrigine correspondant dans T_Pays, sauf un seul client qui aurait une toute petite faute d'orthographe dans son PaysOrigine, le message d'erreur ci-dessus serait exactement le même.
En fait, c'est tout bête : ça veut dire que vous avez au moins un client dont PaysOrigine n'a pas de correspondance parfaite dans T_Pays. Bon, dans notre cas, ce n'est pas un, c'est presque tous (on ne compte pas les PaysOrigine vides - ceux-là ne sont pas gênants).
Pas le choix, donc, il faut à nouveau annuler la relation.
Pour faire le ménage de manière efficace, je vous propose de fermer les relations, et de mettre la table T_Pays et  T_Client côte à côte, comme au début de la leçon.
Voici les choses à faire pour que tout correspondent
  1. Steven Spielberg : Choisir Suisse à la place de Switzerland. Mais pour ce faire, il faut d'abord ajouter Suisse à T_Pays. Et quand vous aurez ajouté Suisse à T_Pays, vous ne pourrez pas encore le choisir dans T_Client, parce que la table ne s'est pas rafraîchie. Je vous laisse vous débrouiller pour arriver à vos fins .
  2. Ajouter Belgique à la table T_Pays (C'est plus facile, il n'y a rien d'autre à faire !)
Le fait qu'il y ait plein de clients qui n'aient pas de PaysOrigine ne gêne pas (heureusement), et le fait que certains pays (Espagne, Italie, U.S.A) ne soient liés à aucun client ne gêne pas non plus (heureusement aussi).

Aucun commentaire:

Enregistrer un commentaire