Hola amigos, antes que nada espero se encuentre bien...pasare al tema por el cual decidi abrirlo, tengo dos tablas: usuarios y materia, quiero crear una tabla llamada alumnos la cual tenga llaves foraneas hacia usuarios y a la tabla materia, ahora he realizado las llaves foraneas con el tipo de dato "Int" a otro "Int" y si me ha corrido, pero al hacerlo de "varchar " a "varchar" no me permite, me sale el siguiente error:
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
email
( 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 originalCREATE 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;