Les clés de substitution (généralement des nombres entiers) ont la valeur ajoutée de rendre les relations de votre table plus rapides et plus économiques en termes de stockage et de vitesse de mise à jour (mieux encore, les clés étrangères n'ont pas besoin d'être mises à jour lors de l'utilisation de clés de substitution, contrairement aux champs de clé d'entreprise, qui changent de temps en temps).
La clé primaire d'une table doit être utilisée pour identifier de manière unique la ligne, principalement à des fins de jointure. Pensez à une table de personnes : les noms peuvent changer et leur unicité n'est pas garantie.
Pensez aux entreprises : vous êtes une entreprise merkinoise heureuse qui fait des affaires avec d'autres entreprises de Merkia. Vous êtes assez malin pour ne pas utiliser le nom de l'entreprise comme clé primaire, et vous utilisez donc l'identifiant unique de l'entreprise du gouvernement de Merkia dans son intégralité (10 caractères alphanumériques). Ensuite, Merkia modifie les identifiants de l'entreprise parce qu'elle a pensé que c'était une bonne idée. Ce n'est pas grave, vous utilisez la fonction de mise à jour en cascade de votre moteur de base de données, pour un changement qui ne devrait pas vous concerner en premier lieu. Plus tard, votre entreprise se développe et vous travaillez désormais avec une entreprise de Freedonia. L'identifiant de l'entreprise en Freedonia comporte jusqu'à 16 caractères. Vous devez élargir la clé primaire de l'identifiant de l'entreprise (ainsi que les champs de clé étrangère dans les commandes, les émissions, les transferts d'argent, etc.), en ajoutant un champ "Pays" dans la clé primaire (ainsi que dans les clés étrangères). Ouch ! Guerre civile en Freedonia, qui est divisée en trois pays. Le nom du pays de votre associé doit être remplacé par le nouveau ; les mises à jour en cascade à la rescousse. BTW, quelle est votre clé primaire ? (Country, CompanyID) ou (CompanyID, Country) ? Cette dernière clé facilite les jointures, tandis que la première permet d'éviter un autre index (ou peut-être plusieurs, si vous souhaitez que vos commandes soient également regroupées par pays).
Tout cela n'est pas une preuve, mais une indication qu'une clé de substitution pour identifier de manière unique une ligne pour toutes les utilisations, y compris les opérations de jointure, est préférable à une clé d'entreprise.
25 votes
@Joachim Sauer : Un argument sur la question de savoir si une chose est subjective peut lui-même être subjectif, sans que cela soit lié d'une quelconque manière à l'objectivité ou à la subjectivité de la chose en question. A moins que vous ne soyez prêt à énoncer les critères objectifs exacts qui font qu'une chose est objective. Il y a des choses appelées "concepts ouverts", comme le nombre de poils nécessaires pour faire une barbe. On peut objectivement dire qu'une personne qui n'a pas de poils au menton n'a pas de barbe, et qu'une personne qui a 5 000 poils d'un pouce de long a une barbe, mais quelque part au milieu, un jugement subjectif est nécessaire pour faire une détermination objective.
1 votes
@Manrico : il suffit de se poser la question suivante : si je n'utilise pas de clé de substitution, ma clé primaire sera-t-elle toujours immuable ? Si la réponse est non, alors vous devriez sérieusement envisager l'utilisation d'une clé de substitution. De même, si la clé primaire est composée, même partiellement, d'entrées utilisateur, vous devez envisager d'utiliser une clé de substitution. Pourquoi ? En raison du risque d'anomalies dans les données.
1 votes
@TylerRick Mais ce n'est pas une bonne question. Elle demande une solution applicable à toutes les situations, alors qu'il n'y en a manifestement pas, comme le prouve la "guerre de religion" dont l'auteur de la question est parfaitement conscient (citation : "Here we go again, the old argument still arises..."). Au lieu de se demander si le monde a changé et si l'on a enfin trouvé une raison convaincante de choisir un camp à tout moment, il vaut mieux poser cette question encore et encore pour chaque situation concrète, et poster sur SO quand on n'est pas sûr. Cela ne fait que susciter le dogmatisme.