Es un tema que he tratado en diferentes posts muchas veces, referido a las PK y las tablas relacionales. Veamos si se puede simplificar:
- Es habitual que aquellos que recién se inician, los programadores y los que no tienen estudios formales supongan que una PK es siempre un campo numérico autoincremental. Eso no solo no es cierto, sino que es hasta desaconsejable usar autoincrementales como PK por diversas razones. Pero como es l a solución que probablemente uses, vamos a asumir que en cada tabla tu usas una PK numérica y autoincremental.
- Una PK creada de esa forma es siempre única, por definición de autoincremental: nunca se repite un número.
- SI usas un ID autoincremtnal, no puedes usarlo como parte de una PK compuesta porque como ese campo se incrementa en cada registro, y la PK es compuesta, basta incremento para permitir que los otros campos repitan valores, sin que se detecte la duplicidad.
Veamos el caso, de estos juegos de valores:
Cita: (1, A, B, C, D, E)
(2, A, B, C, D, E)
(3, A, B, C, D, E)
(4, A, B, C, D, E)
(3, J, K, L, M, N)
Si hiciéramos que los tres primeros campos fuesen la clave, todos los registros podrían entrar sin ningún problema, a pesar de que los primeros tienen los datos repetidos desde el segundo campo.
¿Por qué?
Porque el primero campo cambia de valor en cada registro y
la clave se evalúa como conjunto, y no por sus valores individuales.
¿Y el último registro? Está repitiendo el campo inicial...
Si, pero los otros dos campos no, y como la PK se evalúa en grupo, el error no se produce.
¿Se entiende hacia donde voy?
Cuando tienes una clave compuesta, el conjunto completo se evalúa y es el conjunto completo el que no debe repetirse. Si vas a usar una clave compuesta, procura que los campos de la tabla no incluyan ningún campo que sea autoincremental en esa misma tabla (si es una FK, que sea autoincremental en la tabla de origen no afecta).