Contraintes de référence
Dans la partie précédente, nous avions notamment abouti à définir les 2 tables suivantes :
- Illustrateur(IdIllustrateur, NomIllustrateur, PrénomIllustrateur, NationalitéIllustrateur)
- EstDessinéPar(IdIllustrateur, IdJeu)
Dans les 2 tables, nous remarqons la présence d'un attribut IdIllustrateur. Bien sûr, ces 2 attributs ne sont pas indépendants les uns des autres : dans la table EstDessinéPar, les seuls valeurs que l'on peut mettre pour l'attribut IdIllustrateur sont des valeurs qui doivent exister pour l'attribut IdIllustrateur de la table Illustrateur. On dit alors qu'il y a une contrainte de référence pour l'attribut IdIllustrateur de la table EstDessinéPar vers l'attribut IdIllustrateur de la table Illustrateur et on peut le noter ainsi : EstDessinéPar(IdIllustrateur) référence Illustrateur(IdIllustrateur).
Une contrainte de référence impose pour une table A
que les tuples de valeurs pour un certain ensemble d'attributs EA
de la classe A
, pour tous les tuples de la table A
existent pour les attibuts clé dans une table B
. On dit alors que EA
est une clef étrangère et on note :
A(EA) référence B(EB)
.
N.B. : les attributs de EA
et de EB
n'ont pas forcément les mêmes noms.
Précision : l'existence d'une contrainte de référence n'impose pas que des valeurs soient définies pour les attributs clé étrangère pour tous les tuples ; elle impose seulement que si une valeur est définie, alors cette valeur est présente pour les champs référencés de la table référencée.
Exercice : déterminer toutes les contraintes de référence sur le problème de la ludothèque (prendre le schéma de relation obtenu dans l'exercice 4 du cours "Modèle conceptuel d'une base de données relationnelle").
Voici la liste des contraintes de référence :
- Jeu(IdÉditeur) référence Éditeur(IdÉditeur) ;
- EstDessinéPar(IdIllustrateur) référence Illustrateur(IdIllustrateur) ;
- EstDessinéPar(IdJeu) référence Jeu(IdJeu) ;
- EstAuteurDe(IdAuteur) référence Auteur(IdAuteur) ;
- EstAuteurDe(IdJeu) référence Jeu(IdJeu) ;
- ParleDe(IdThème) référence Thème(IdThème) ;
- ParleDe(IdJeu) référence Jeu(IdJeu).
On peut aussi noter les contraintes de référence avec des flèches sur un graphe représentant les tables (c'est par exemple ce que proposent des outils comme Access ou Libre Office. Mais attention de ne pas mélanger cette représentation avec un diagramme de classe. Voici un exemple (représentation non normalisée) :