Clé artificielle
Définition : Clé artificielle
S'il est impossible de trouver une clé primaire, ou que les clés candidates sont trop complexes, il est possible de faire appel à une clé artificielle. Une clé artificielle est un attribut supplémentaire ajouté au schéma de la relation, qui n'est lié à aucune signification, et qui sert uniquement à identifier de façon unique les enregistrements et/ou à simplifier les références de clés étrangères.
Définition : Clé signifiante
Une clé est signifiante si elle n'est pas artificielle.
Synonyme : Clé naturelle
Attention : Clé artificielle et niveau logique
Au niveau du modèle logique, il faut éviter la simplicité consistant à identifier toutes les relations avec des clés artificielles, et ne réserver cet usage qu'aux cas particuliers.
Conseil :
Si au moins une clé naturelle composée d'un seul attribut existe en choisir une parmi celles-ci comme clé primaire
Sinon, choisir une clé naturelle composée de plusieurs attributs si elle ne pose pas de problème identifié
Toujours justifier l'emploi d'une clé artificielle (au niveau logique uniquement pour des raisons de complexité du modèle, les questions de performance sont étudiées au niveau physique)
Remarque : Clé artificielle et niveau physique, évolutivité, maintenance et performance
Au niveau de l'implémentation physique par contre, il est courant que des clés artificielles soient utilisées de façon systématique.
Du point de vue de l'évolutivité de la BD, il existe toujours un risque qu'une clé non-artificielle perde sa propriété d'unicité ou de non-nullité.
Du point de vue de la maintenance de la BD, il existe toujours un risque qu'une clé non-artificielle voit sa valeur modifiée et dans ce cas, la répercution de ce changement pour mettre à jour toutes les références peut poser problème.
Du point de vue de la performance de la BD, les clés non-artificielles ne sont pas en général optimisées en terme de type et de taille, et donc peuvent limiter les performances dans le cadre des jointures. Précisons néanmoins qu'inversement les clés artificielles ont pour conséquence de systématiser des jointures qui auraient pu être évitées avec des clés primaires signifiantes.
Exemple : Problème d'évolutivité posé par une clé signifiante
Soit le numéro de sécurité sociale la clé primaire d'une table d'une BD française, elle ne permettra pas d'entrer un individu non-français issu d'un pays ne disposant pas d'un tel numéro.
Exemple : Problème de maintenance posé par une clé signifiante
Soit le numéro de sécurité sociale la clé primaire d'une table d'une BD centrale dont les données sont exploitées par d'autres tables d'autres BD qui viennent "piocher" dans cette BD pour leurs propres usages, sans que la BD centrale ne connaisse ses "clients". Soit une erreur dans la saisie d'un numéro de sécurité sociale dans la BD centrale, si ce numéro est corrigé, il faudrait (ce qui n'est pas possible dans notre cas) impérativement en avertir toutes les bases utilisatrices pour qu'elles mettent à jour leurs références.
Exemple : Problème de performance posé par une clé signifiante
Soit le numéro de sécurité sociale la clé primaire d'une table comptant un million d'enregistrements, ce numéro est généralement un nombre à 13 chiffres ou une chaîne à 13 caractères, ce qui dans les deux cas est supérieur au nombre à 7 chiffres suffisant pour identifier tous les individus de la BD. Les performances seront donc toujours moins bonnes, lors des jointures, si une clé prend deux fois plus de place en mémoire que son optimum. Mais ajoutons que cette perte de performance n'a pas toujours de conséquence sur la réalité perceptible par les utilisateurs de la BD.
Inversement, soit une clé artificielle la clé primaire d'une table T1, par ailleurs référencée par une autre table T2. Soit le numéro de sécurité sociale un attribut clé de T1. Si l'on veut par requête disposer des informations de T2 ainsi que du numéro de sécurité sociale de T1, alors il faudra faire une jointure, tandis que si ce numéro signifiant avait été choisi comme clé primaire, cela n'aurait pas été nécessaire.