MySQL problema al relacionar tablas

cursillo

New Member
Messages
10
Reaction score
0
Points
0
Hola a todos,:biggrin: un saludo desde Teruel (España)

Estoy intentando crear una tabla en mi base de datos que haga referencia a otras dos: C = A + B.

Las dos tablas de contenido las he creado con el tipo InnoDB y funcionan, el problema viene al intentar crear la tercera (C)

No me permite usar FOREIGN KEY. ¿ Es debido a alguna limitación de MySQL Admin? ¿Al servidor? o es que no escribo bien el código? :dunno:

Gracias por vuestras respuestas.

Este es el código problemático:

CREATE TABLE repertorio (
id INT NOT NULL AUTO_INCREMENT,
id_compositor INT NOT NULL,
id_obra INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (id_compositor) REFERENCES compositor (id),
FOREIGN KEY (id_obra) REFERENCES obra (id)
);
ENGINE = InnoDB;
 

miguelkp

Member
Messages
304
Reaction score
7
Points
18
¿Y cuál es el error exacto que te da? Supongo que al intentar crear la tabla te dará un mensaje de error, ¿no?

Y si puedes ponernos el esquema entidad-interrelación o el esquema relacional que estás usando, mejor que mejor. Y si no lo estás usando... mejor hazlos porque es como salen bien estas cosas: organizándose :)
 
Last edited:

cursillo

New Member
Messages
10
Reaction score
0
Points
0
:lockd::biggrin:
Bueno, encontré una solución para evitar el error (aunque sigo sin saber la causa).

Lo que he hecho ha sido crear la tabla sin indicar el tipo (es decir, hacerla MyISAM) y luego cambiarla a InnoDB.
un simple CREATE y luego ALTER.


Por si a alguien le apetece descifrar el misterio, este era el problema:

Tengo dos tablas del tipo InnoDB (compositor y obra), y quiero hacer una tercera que las relacione (repertorio), pues cada compositor puede tener más de una obra (uno a muchos).

Gracias por vuestra ayuda.:cool:


consulta SQL:
CREATE TABLE `repertorio` ( `id` INT NOT NULL AUTO_INCREMENT ,
`id_compositor` INT NOT NULL ,
`id_obra` INT NOT NULL ,
PRIMARY KEY ( `id` ) ,
FOREIGN KEY ( `id_compositor` ) REFERENCES `compositor` ( `id` ) ,
FOREIGN KEY ( `id_obra` ) REFERENCES `obra` ( `id` )
) ENGINE = InnoDB



MySQL ha dicho:
#1005 - Can't create table './*****/repertorio.frm' (errno: 150) :lockd:
 
Last edited:

miguelkp

Member
Messages
304
Reaction score
7
Points
18
Y cada obra es de un solo compositor, ¿no?
Si es una relación 1:N juraría que de hecho no te hace falta la tabla repertorio. Con propagar la clave de compositor en obra, obtienes el mismo resultado de identificar cada obra con uno y solo un compositor.
 
Top