J'ai un tableau avec quatre colonnes qui ne sont pas toutes nullables, et les données sont telles que les quatre sont nécessaires pour distinguer un enregistrement unique. Cela signifie que si je devais créer une clé primaire, elle devrait comprendre toutes les colonnes. Les requêtes sur la table consisteront presque toujours à retirer un seul enregistrement, c'est-à-dire que toutes les colonnes seront filtrées dans la requête.
Étant donné que chaque colonne devra être recherchée, le fait d'avoir une clé primaire me profite-t-il du tout (en plus d'imposer l'unicité des enregistrements)?
Il est généralement recommandé que vous ayez une clé de substitution dans de telles situations, donc des clés étrangères dans d'autres tables (et toutes les références d'enregistrement qui peuvent être stockées en externe, comme si elles sont portées sur des chaînes de requête où une demande http (s) fait référence à une des enregistrements) ont quelque chose à se référer qui ne changera pas si les données de la ligne changent. Si vous faites cela, ce serait votre clé primaire.
Si vous n'ajoutez pas une telle clé de substitution, la manière dont vous décrivez les données d'accès ayant les quatre colonnes comme clé primaire ne serait pas un inconvénient. Si vous faites de la clé l'index cluster de la table, cela aidera ces requêtes car il y aura un niveau dans l'arborescence b sur le disque pour descendre pour trouver les données pour une ligne donnée.
la source
Les clés composites en tant que clés primaires rencontrent également des problèmes de taille d'index qui peuvent affecter l'utilisation du disque, les vitesses io et les sauvegardes. Vous voudrez peut-être consulter les articles de Kimberly Tripp sur les clés primaires et les index clusterisés ici: http://www.sqlskills.com/BLOGS/KIMBERLY/post/The-Clustered-Index-Debate-again!.aspx
Je suggérerais moi aussi une clé de substitution dans ce cas au lieu d'une clé naturelle.
la source
Si vous avez un tableau représentant une relation plusieurs-à-plusieurs qui ne comporte que 2 colonnes, cela semble raisonnable.
Cf. cette question SO
Mais j'avoue, que j'ajoute des clés de substitution même dans ces cas.
la source