En cas de clé étrangère composite, il s'agit parfois (généralement ?) d'une information intrasèque de la donnée fille. Donc on ne duplique pas de données à proprement parler.
Avec une clé "artificielle" tu supprimes une information qui peut être essentielle pour l'optimisation
Ex:
1 2 3
| SELECT * FROM CHILD WHERE PARENT_NOM='DUPONT'
vs
SELECT * FROM CHILD WHERE PARENT_ID IN (SELECT ID FROM PARENT WHERE NOM='DUPONT'); |
Il en est de même pour les optimiseurs de certains SGBD, qui utiliseront ce genre de liens pour optimiser les lectures.
Ca peut paraître bête dans cet exemple mais avec des relations un peu complexe, il te faut constamment faire des jointures sur les tables pour récupérer/filtrer les données.
Ce n'est pas nécessairement gênant avec les clusters Oracle (cad liés physiquement les enregistrements) mais je ne sais pas si les autres SGBD gère ce genre de mécanismes. De toutes façons ca revient à dénormaliser le schéma. Donc niveau gestion de l'espace disque, ca doit se valoir.
Partager