clave primaria es un concepto de dominio que de forma única (necesaria y suficiente) identifica a su entidad entre entidades similares. Una clave primaria compuesta (múltiples columnas) tiene sentido solo cuando una parte de la clave se refiere a una instancia particular de otra entidad de dominio.
Digamos que tiene una colección personal de libros. Mientras esté solo, puede contarlos y asignarle un número a cada uno. El número es la clave principal del dominio de su biblioteca.
Ahora desea fusionar su biblioteca con la de su vecino pero aún así poder distinguir a quién pertenece un libro. El dominio ahora es más amplio y la clave primaria es ahora (propietario, book_id).
Por lo tanto, hacer que cada compuesto de clave principal no sea su estrategia, sino que debe usarlo cuando sea necesario.
Ahora algunos datos sobre MySQL. Si define una clave primaria compuesta y desea que RDBSM aumente automáticamente los identificadores, debe conocer la diferencia entre MyISAM y el comportamiento de InnoDB.
Digamos que queremos una tabla con dos campos: parent_id, child_id. Y queremos que child_id sea autoincrementado.
MyISAM se autoincrementará de forma única dentro de los registros con el mismo parent_id e InnoDB se autoincrecerá de manera única dentro de la tabla completa.
En MyISAM debe definir la clave principal como (parent_id, child_id), y en InnoDB como (child_id, parent_id), porque el campo autoincremented debe ser el componente más a la izquierda en la clave principal en InnoDB.
Posible duplicado de [Cómo crear correctamente las claves primarias compuestas - MYSQL] (http://stackoverflow.com/questions/5835978/how-to-properly-create-composite-primary-keys-mysql) –
No se puede ser un duplicado de algo publicado 3 años después. – Kaji
http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-though-its-much-newer-and-ha ;-) –