Habituellement, lorsque vous avez une table avec une clé primaire à plusieurs colonnes, c'est le résultat d'une table de jointure (plusieurs à plusieurs) qui est devenue élevée pour être sa propre entité (et mérite donc sa propre clé primaire). Nombreux sont ceux qui soutiennent que toute table de jointure DEVRAIT être une entité par défaut, mais c'est une discussion pour un autre jour.
Regardons une relation hypothétique de plusieurs à plusieurs:
Étudiant * --- * Classe
(Un étudiant peut être dans plusieurs classes, une classe peut avoir plusieurs étudiants).
Entre ces deux tables se trouvera une table de jonction appelée StudentClass (ou ClassStudent selon la façon dont vous l'écrivez). Parfois, vous voulez garder une trace de choses comme lorsque l'élève était en classe. Vous l'ajouterez donc à la table StudentClass. À ce stade, StudentClass est devenu une entité unique ... et devrait recevoir un nom pour le reconnaître comme tel, par exemple l'inscription.
Étudiant 1 --- * Inscription * --- 1 classe
(un étudiant peut avoir plusieurs inscriptions, chaque inscription est pour une classe (ou dans le sens contraire, une classe peut avoir plusieurs inscriptions, chaque inscription est pour un étudiant).
Maintenant, vous pouvez interroger des choses comme, combien d'étudiants étaient inscrits dans la classe de chimie 101 cette dernière année? Ou dans quelles classes l'étudiant John Doe était-il inscrit pendant ses études à l'Université Acme? Cela était possible sans la clé primaire séparée, mais une fois que vous avez une clé primaire pour l'inscription, une requête plus facile serait de ces inscriptions (par id), combien d'étudiants ont reçu une note de passage?
La détermination de savoir si une entité mérite un PK se résume à combien de requêtes (ou de manipulations) vous ferez pour cette entité. Supposons, par exemple, que vous vouliez joindre les devoirs terminés pour un élève d'une classe. L'endroit logique pour attacher cette entité (affectation) serait sur l'entité d'inscription. Donner à l'inscription sa propre clé primaire rendrait les requêtes d'affectation plus simples.