Por lo general, cuando tiene una tabla con una clave primaria de varias columnas, es el resultado de una tabla de unión (muchos a muchos) que se ha elevado para ser su propia entidad (y, por lo tanto, merece su propia clave principal). Hay muchos que argumentan que cualquier tabla de unión DEBE ser una entidad por defecto, pero eso es una discusión para otro día.
Veamos una relación hipotética de muchos a muchos:
Estudiante * --- * Clase
(un estudiante puede estar en varias clases, una clase puede tener varios estudiantes).
Entre esas dos tablas habrá una tabla de unión llamada StudentClass (o ClassStudent dependiendo de cómo la escriba). A veces, desea realizar un seguimiento de cosas como cuando el estudiante estaba en la clase. Entonces lo agregará a la tabla StudentClass. En este punto, StudentClass se ha convertido en una entidad única ... y se le debe dar un nombre para reconocerlo como tal, por ejemplo, inscripción.
Estudiante 1 --- * Matrícula * --- 1 Clase
(un estudiante puede tener muchas Inscripciones, cada Inscripción es para una clase (o en sentido contrario, una Clase puede tener muchas Inscripciones, cada Inscripción es para un Estudiante).
Ahora puede consultar cosas como, ¿cuántos estudiantes se inscribieron en la clase de Química 101 el año pasado? ¿O en qué clases se inscribió el estudiante John Doe mientras asistía a la Universidad de Acme? Esto fue posible sin la clave primaria separada, pero una vez que tenga una clave primaria para la inscripción, una consulta más fácil sería de estas inscripciones (por id), ¿cuántos estudiantes recibieron una calificación aprobatoria?
La determinación de si una entidad merece un PK se reduce a la cantidad de consultas (o manipulación) que hará para esa entidad. Digamos, por ejemplo, que desea adjuntar las tareas completadas para un estudiante en una clase. El lugar lógico para adjuntar esta entidad (Asignación) sería en la entidad de Inscripción. Darle a la inscripción su propia clave principal facilitaría las consultas de Asignación.