ERROR 1215 (HY000): Impossible d'ajouter des contraintes d'index externe
En español: ERROR 1215 (HY000): No se puede agregar índice de restricciones externas o No puede adicionar clave extranjera constraint.
El error de arriba me sale al intentar crear la tabla alumno.
Ahora no se a que se deba, he leido que si se pueden hacer llaves foraneas con varchar, y ese es mi caso, tengo la misma longitud y el mismo tipo de dato, pero no funciona, al igual cambie las claves primarias compuestas por "UNIQUE Key" e igual no funciono,
estas es la explicacion de mis tablas:
los usuarios son para acceder al sistema por eso solo requeria lo que era el
id_usuario= auto_increment para llevar un conteo de usuarios
login= sobrenombre o nick del usuario.
clave= clave para acceder al sistema.
nivel= este puede ser ('administrador','docente' y 'alumno')
ahora cree una clave primaria compuesta( la cual contiene el id_usuario,login y clave) esto porque ningun alumno y docente pueden tener los mismos campos de (id_usuario,login y clave).
En la tabla materia:
id_materia= identificador de la materia auto_increment porque se lleva un control ascendente de la materia.
nombre= nombre de la materia.
duracion de tipo date: los cursos duran semanas(4 como ejemplo).
y tambien cree una clave primaria compuesta(id_materia y nombre) porque ninguna materia puede tener el mismo identificador y nombre.
Tabla alumno:(aqui esta la informacion referente al alumno)
id_alumno= matricula del alumno.
nombre
apellidos
direccion
telefono
( y le agregue las llaves foraneas donde solo pueden tener un login, clave y una materia).
les dejo el código, espero que me puedan ayudar, se los agradeceria mucho, al igual acepto sugerencias...saludos desde mexico
Código SQL:
Ver original
CREATE TABLE usuarios( id_usuario INT AUTO_INCREMENT, login VARCHAR(20) , clave VARCHAR(16) , nivel VARCHAR(20) , PRIMARY KEY(id_usuario,login,clave) ) engine = innodb; CREATE TABLE materia( id_materia INT AUTO_INCREMENT, nombre VARCHAR(30) NOT NULL, duracion DATE, PRIMARY KEY(id_materia,nombre) ) engine = innodb; CREATE TABLE alumno( id_alumno VARCHAR(11) PRIMARY KEY, nombre VARCHAR(20) NOT NULL, apellidos VARCHAR(40) NOT NULL, direccion VARCHAR(30) NOT NULL, telefono INT, email VARCHAR(40), login_alumno VARCHAR(20) NOT NULL, clave_alumno VARCHAR(16) NOT NULL, materia_alumno VARCHAR(30) NOT NULL, FOREIGN KEY(login_alumno) REFERENCES usuarios(login) ON UPDATE cascade ON DELETE cascade, FOREIGN KEY(clave_alumno) REFERENCES usuarios(clave) ON UPDATE cascade ON DELETE cascade, FOREIGN KEY(materia_alumno) REFERENCES materia(nombre) ON UPDATE cascade ON DELETE cascade ) engine = innodb;