Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: jga en 07 de Abril 2015, 19:16

Título: problema con una foreign key de una primary key compuesta ( MYSQL )
Publicado por: jga en 07 de Abril 2015, 19:16
Hola amigos , tengo un problema al relacionar dos tablas en mysql , el problema , no se si llamarlo asi es el siguiente :
tengo dos tablas , en una profesores tengo la primary key compuesta por el nombre , apellidos y el nombre del centro de trabajo , porque he elegido estos tres campos para crear una clave primaria compuesta? , porque el dni , que seria lo ideal no esta disponible como opcion , y como dos profesores de distintos centros se pueden llamar igual ( hay un par que se apellidan igual , por increible que parezca ) poniendo el centro tambien , ya es muy dificil , por no decir imposible , que en el mismo centro docente dos profesores se llamen y apelliden idenicamente .

en la segunda tabla tengo las asignaturas ,; cada profesor de ese centro tiene una especialidad , que no tiene otro profesor del centro ( podria haber varios profesores en el centro que tambien tienen esa especialidad en cuyo caso seria una relacion N:N y habria que crear otra tabla con la relacion y sus atributos , mas las claves primarias de las otras dos entidades ) y llego al qui de la cuestion despues del rollo , al intentar asignar las foreign key nombre apellidos y centro que aparecen en asignatura como foraneas de nombre ,apellidos y centro de la primaria de la tabla profesores solo me coge un campo como foranea pero los otros dos no .

pongamos que escribo la sentencia :
 alter table asignaturas add foreign key (nombre_prof,apellidos_prof,centro_prof) references profesores (nombre,apellidos,centro)

y no me da ningun error , la sentencia se valida como buena , pero al hacer :

describe asignaturas

ma aparece en el campo key : asignatura PRI , nombre MUL y apellidos y centro no tienen nada en el campo key .

y aqui despues de todo el rollo pesado este que acabo de soltar viene la pregunta final :

es esto correcto? quiero decir , lo he hecho bien y solo debe aparecer un campo MUL de las tres foraneas ,  para la clave primaria compuesta por tres campos de la otra tabla ?
es que segun el manual para una clave primaria compuesta , hacen falta los mismos campos para la clave foranea. tambien he intentado añadirlas una a una pero me da el error de cannot add constraint ....blablabla

espero no haber sido un pesado pero queria explicarme lo mas claramente posible , un abrazo fuerte y gracias.
Título: Re:problema con una foreign key de una primary key compuesta ( MYSQL )
Publicado por: Ogramar en 08 de Abril 2015, 00:53
Hola, una clave primaria en la práctica profesional raramente es una clave compuesta, y menos por un nombre , apellidos y nombre de centro de trabajo.

Lo normal es que la clave primaria sea una columna única, por ejemplo idProfesores para la tabla profesores e idCentros para la tabla de centros. Si no tienes restricciones, esto sería lo que te recomendaría

Salu2
Título: Re:problema con una foreign key de una primary key compuesta ( MYSQL )
Publicado por: jga en 08 de Abril 2015, 08:07
Gracias de nuevo Ogramar , un abrazo fuerte.