Je suis quelques règles :
- Les clés primaires doivent être aussi petites que nécessaire. Préférez un type numérique car les types numériques sont stockés dans un format beaucoup plus compact que les formats de caractères. En effet, la plupart des clés primaires seront des clés étrangères dans une autre table et utilisées dans plusieurs index. Plus votre clé est petite, plus l'index est petit, moins vous utiliserez de pages dans le cache.
- Les clés primaires ne doivent jamais changer. La mise à jour d'une clé primaire devrait toujours être hors de question. En effet, il est plus susceptible d'être utilisé dans plusieurs index et utilisé comme clé étrangère. La mise à jour d'une seule clé primaire peut entraîner un effet d'entraînement des modifications.
- N'utilisez PAS "la clé primaire de votre problème" comme clé primaire de votre modèle logique. Par exemple, le numéro de passeport, le numéro de sécurité sociale ou le numéro de contrat de l'employé, car ces "clés naturelles" peuvent changer dans des situations réelles. Assurez-vous d'ajouter des contraintes UNIQUE pour celles-ci si nécessaire pour assurer la cohérence.
Sur substitution vs clé naturelle, je me réfère aux règles ci-dessus. Si la clé naturelle est petite et ne changera jamais, elle peut être utilisée comme clé primaire. Si la clé naturelle est grande ou susceptible de changer, j'utilise des clés de substitution. S'il n'y a pas de clé primaire, je crée quand même une clé de substitution car l'expérience montre que vous ajouterez toujours des tables à votre schéma et que vous souhaiterez mettre en place une clé primaire.