• Aucun résultat trouvé

INTEGRITE REFERENTIELLE

CHAPITRE 6 – RELATIONS ENTRE LES TABLES

5. INTEGRITE REFERENTIELLE

Caractéristique fondamentale de l’intégrité référentielle : il ne peut y avoir de valeur de clé étrangère qui ne soit pas une valeur de la clé primaire correspondante. On ne peut ni saisir, ni modifier, ni supprimer une valeur dans la clé étrangère, dès lors qu’il n’y aurait pas de valeur identique dans la clé primaire (en revanche, il peut exister des valeurs de clé primaire qui ne soient pas valeurs de clé étrangère).

Si l’intégrité référentielle impose quelques contraintes, celles-ci s’avèrent nécessaires au regard de la cohérence des données. Nous conseillons de l’appliquer sur les relations de la base de données.

L’effet principal de l’intégrité référentielle est d’empêcher qu’une valeur soit saisie dans le champ où arrive la relation (ordinairement clé étrangère), quand cette valeur n’a pas sa contrepartie dans le champ d’où part la relation (ordinairement clé primaire).

- Si le cas existe avant la demande d’intégrité référentielle, celle-ci est refusée et un message d’erreur s’affiche.

- L’intégrité référentielle étant appliquée à une relation, si on saisit une valeur dans la clé étrangère (côté plusieurs ∞), alors que cette valeur n’est pas présente dans le champ analogue (côté 1), la validation de la saisie est refusée.

Exigences de l’intégrité référentielle

L’application de l’option « Intégrité référentielle » est rétroactive. Elle n’est applicable à une relation que si elle respecte déjà les critères d’intégrité référentielle. Sinon, procédez aux modifications nécessaires afin de pouvoir l’appliquer.

Curieusement, l’intégrité référentielle n’exige pas que le champ d’où part la ligne de relation soit doté d’une clé primaire.

Elle vérifie juste que le champ identifiant a comme valeur de sa propriété « Indexé » la valeur « Oui – Sans doublons » (comme est d’office cette valeur pour un champ clé primaire).

Si le champ identifiant, usuellement clé primaire, n’est pas « Indexé – Sans doublons », un message d’erreur s’affiche, empêchant l’application de l’intégrité référentielle.

Afin de pouvoir appliquer l’intégrité référentielle, il faut que, pour chaque relation, les deux champs sur lesquels elle s’appuie soient dotés du même type de données, à l’exception importante suivante : si le champ identifiant est de type NuméroAuto, cas usuel, le champ correspondant peut et doit être du type Numérique.

La propriété « Taille du champ » doit également être la même pour les deux champs.

Exemple : l’intégrité référentielle ne peut pas être appliquée à une relation liant un champ de type Numérique et de taille Octet à son champ correspondant de type Numérique, mais doté, lui, de taille Entier long.

Exemple d’application d’intégrité référentielle sur une relation

Considérons les deux tables reliées suivantes :

VILLE PERSONNE

NumeroVille 1 NumeroPers

NomVille NomPers

NbreHabitants Ville Département

NumeroVille est le champ identifiant de la table VILLE. On l’a doté d’une clé primaire.

NumeroPers est le champ identifiant de la table PERSONNE. On l’a doté d’une clé primaire.

Le champ Ville est la clé étrangère correspondant à la clé primaire NumeroVille.

L’application de l’intégrité référentielle sur la relation empêche l’ajout d’un numéro de ville dans le champ Ville, dès lors que ce numéro n’existe pas dans le champ NumeroVille.

Par ailleurs, le champ NoVille étant de type NuméroAuto, le champ correspondant Ville ne peut pas être de type Texte. Cela serait contraire aux règles de l’intégrité référentielle

(même type de données des champs correspondants, à l’exception d’un champ type NuméroAuto qui doit correspondre avec un champ de type Numérique).

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

Pour appliquer l’intégrité référentielle sur une relation, procédez ainsi :

- Fermer les deux tables liées par la relation (clic droit sur l’onglet de la table à fermer > Fermer).

- Affichez la fenêtre « Relations » : à l’onglet « Outils de base de données », dans le groupe Relations, activez le bouton Relations. Affichez les deux tables liées par la relation.

Ne pas confondre une table ouverte (elle affiche un onglet portant son nom) et une table affichée dans la fenêtre de création de la requête. L’ouverture et cet affichage sont indépendants.

- Affichez la fenêtre « Modifier des relations » : à l’onglet Créer des « Outils de relation », dans le groupe Outils, activez le bouton « Modifier des relations », ou bien faites un clic droit sur la ligne de la relation > Modifier une relation.

Cochez la case permettant d’appliquer l’intégrité référentielle (la première case).

Validez.

Si aucun message d’erreur n’apparait alors, cela indique que la relation respecte les critères d’intégrité référentielle.

Sinon, prenez connaissance du message qui s’affiche. Cliquez sur OK, fermez la fenêtre

« Modifier des relations » et effectuez les modifications nécessaires pour mettre la relation en conformité avec les règles de l’intégrité référentielle. Puis essayez à nouveau de lui appliquer l’intégrité référentielle.

L’intégrité référentielle étant appliquée à la relation, les côtés un ou plusieurs sont indiqués respectivement par le chiffre 1 ou par le symbole ∞.

Deux options complémentaires : Mises à jour en cascade et Effacements en cascade

Seulement après avoir activé l’option « Intégrité référentielle », en ayant coché la case correspondante dans la fenêtre « Modifier des relations » (cf. § précédent), on dispose de deux autres options, qui sont proposées juste en-dessous :

- « Mettre à jour en cascade les enregistrements correspondants » - « Effacer en cascade les enregistrements correspondants ».

Ces deux dernières options ne pourront s’appliquer à la relation que si l’intégrité référentielle est elle-même appliquée.

« Mettre à jour en cascade les enregistrements correspondants »

En général, on coche cette option, bien qu’elle soit peu utile.

Si on active cette option : la modification d’une valeur du champ côté 1, usuellement clé primaire, entraînera la même modification de valeur dans le champ correspondant, côté ∞, usuellement clé étrangère.

Cette option sert peu : on modifie rarement les valeurs d’une clé primaire.

La clé primaire est souvent de type NuméroAuto, or toute modification de valeur est impossible dans ce type de champ.

Exemple

ETAT VILLE

NomEtat 1 NuméroVille

Continent NomVille

NomEtat

Supposons qu’on ait appliqué à cette relation l’intégrité référentielle, ainsi que la

« mise à jour en cascade ».

Si on modifie la valeur « Zimbawe » du champ NomEtat de la table ETAT, pour l’écrire

« Zimbabwe », elle sera modifiée en conséquence dans le champ analogue de la table VILLE.

« Effacer en cascade les enregistrements correspondants »

En général, on ne coche pas cette option, du fait de son potentiel destructeur.

Si on active cette option : la suppression d’un enregistrement, donc en particulier de la valeur de son champ côté un, entraînera la suppression des enregistrements ayant cette valeur dans la clé côté plusieurs ∞.

La suppression des enregistrements peut elle-même provoquer la suppression d’autres enregistrements, par le même processus. Et ainsi de suite.

Il convient donc d’être prudent dans l’application de cette option, d’autant plus si la base comporte de nombreuses tables reliées. Elle risque de faire perdre de façon inattendue nombre d’enregistrements. L’effet en chaîne d’une suppression en cascade doit être examiné en détail avant d’être appliqué.

Exemple

Dans l’exemple précédent, si on supprime un nom d’Etat, toutes les villes de la table

VILLE situées dans cet Etat seront effacées. Supposons qu’en supprimant Venezuela, on efface les villes ayant les valeurs de NuméroVille 3, 9 et 17.

Si une autre table de la base, par exemple la table CLIENT, a comme champ correspondant NuméroVille, les enregistrements de cette troisième table dont les valeurs de NoVille sont 3, 9 et 17 sont également effacés.

La continuation du processus peut continuer à provoquer l’effacement en chaîne d’autres enregistrements.

ETAT VILLE CLIENT

NomEtat 1 NuméroVille 1 NoClient 1

Continent NomVille NomClient

NomEtat Téléphone (etc.)

NoVille

CHAPITRE 7 – TABLES ET ENREGISTREMENTS,