Considérons cet écran libreoffice:
Le contenu de 'service' doit nécessairement être une valeur de la clef primaire 'service_id'. C'est l'intégrité référentielle. 'service' est une clef étrangère (foreign key).
Si les tables sont dans une base de données Postgresql, cette intégrité référentielle peut être garantie par une contrainte.
Par exemple si je tente de remplacer le service 06 de l'employés 1011 par le service 07 (qui n'existe pas) j'obtiens:
Et l'utilisation du menu déroulant me permet uniquement de remplacer le service du matricule 1011 par un service existant:
Mais que se passe-t-il si je touche à la table 'services' ? Cette fois l'existence de la contrainte postgresql est essentielle pour assurer l'intégrité référentielle.
Si je tente de supprimer la rangée de clef 03 de la table 'services' je reçois ce message:
La suppression n'a pas lieu. Cependant si je regarde de plus près cette contrainte (employés_services_fkey) à l'aide de pgAdmin4, je constate que d'autres possibilité existent:
En cas de suppression (On delete) les actions le plus courantes sont:
SET NULL:
Pour tous les employés dont le code service est 03, ce code service est mis à NULL, si c'est permis.
NULL, ce n'est pas des espaces pour du texte, ni zéro pour un nombre.
CASCADE:
Tous les employés du service 03 sont supprimés
SET DEFAULT:
Si le code service d'un employé est 03, il est remplacé par sa valeur par défaut, si celle-ci existe et s'il lui correspond une rangée de la table 'services'.
Par exemple, cette valeur par défaut pourrait être 99, mais il faudrait aussi dans la table 'services' une rangée 99.
En cas d'update:
CASCADE
Le code service de tous les employés concernés est modifié