
Problema con llaves foraneas
Publicado por jesus (4 intervenciones) el 27/02/2015 23:44:09
Hola espero se encuentren muy bien, soy nuevo en este foro, al igual que mysql, miren lo que pasa es que tengo que realizar como proyecto de practica un control escolar con las siguientes tablas:
*usuarios
*alumnos
*docentes
*materia
*cargaAcademica
las primeras cuatros ya las tengo, si pude relacionarlas, ya lo implemente y probe insertando registros, tanto en la tabla usuarios, materias y en la de alumnos, tambien implemente la tabla docente y tambien ha corrido bien, ahora voy con la tabla carga, como podria realizarla es que me piden que tenga:
id_carga auto_increment(no tengo problema)
alu---nombre del alumno referenciado al nombre de algun alumno registrado (problema)
doc--nombre de docente referenciado al nombre de un docente registrado(problema)
materia-nombre de materia registrada(no tengo problema)
fecha_inicio--cuando inicio el curso(no problema)
calificacion int---para asignar un calificacion una vez terminado el curso...(no tengo problema)
Y que yo sepa las claves foraneas hacen referencia a claves de otra tabla, incluso no he podido referencias a otro campo, pude referencias el nombre de la materia en la tabla carga con el nombre en la tabla materia porque era UNIQUE,ninguna materia se puede repetir, me surge la idea de poner unique tanto el nombre del docente, como el del alumno pero suena ilogico, ya que pueden hacer mas docentes y alumnos con el mismo nombre......¿ tendre que cambiar la estructura de mi BD?, acepto sugerencias y recomendaciones, les dejo el código y espero que me puedan ayudar.
Saludos desde mexico!!....
*usuarios
*alumnos
*docentes
*materia
*cargaAcademica
las primeras cuatros ya las tengo, si pude relacionarlas, ya lo implemente y probe insertando registros, tanto en la tabla usuarios, materias y en la de alumnos, tambien implemente la tabla docente y tambien ha corrido bien, ahora voy con la tabla carga, como podria realizarla es que me piden que tenga:
id_carga auto_increment(no tengo problema)
alu---nombre del alumno referenciado al nombre de algun alumno registrado (problema)
doc--nombre de docente referenciado al nombre de un docente registrado(problema)
materia-nombre de materia registrada(no tengo problema)
fecha_inicio--cuando inicio el curso(no problema)
calificacion int---para asignar un calificacion una vez terminado el curso...(no tengo problema)
Y que yo sepa las claves foraneas hacen referencia a claves de otra tabla, incluso no he podido referencias a otro campo, pude referencias el nombre de la materia en la tabla carga con el nombre en la tabla materia porque era UNIQUE,ninguna materia se puede repetir, me surge la idea de poner unique tanto el nombre del docente, como el del alumno pero suena ilogico, ya que pueden hacer mas docentes y alumnos con el mismo nombre......¿ tendre que cambiar la estructura de mi BD?, acepto sugerencias y recomendaciones, les dejo el código y espero que me puedan ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
create table usuarios(
id_usuario int auto_increment not null primary key,
login varchar(20) not null,
clave varchar(16) not null,
nivel varchar(20) not null,
unique (login)
) engine = innodb;
create table materia(
id_materia int auto_increment not null primary key,
nombre varchar(30) not null,
duracion date not null,
unique (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_alu varchar(20) not null,
clave_alu varchar(16) not null,
materia_alu varchar(30) not null,
foreign key(login_alu) references usuarios(login) on update cascade on delete cascade,
foreign key(materia_alu) references materia(nombre) on update cascade on delete cascade
) engine = innodb;
create table docente(
id_docente 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_doc varchar(20) not null,
clave_doc varchar(16) not null,
materia_doc varchar(30) not null,
foreign key(login_doc) references usuarios(login) on update cascade on delete cascade,
foreign key(materia_doc) references materia(nombre) on update cascade on delete cascade
) engine = innodb;
create table carga(
id_carga int auto_increment primary key,
alu varchar(11) not null,
doc varchar(11) not null,
mat varchar (30)not null,
fecha_inicio date,
calificacion int,
foreign key(alu) references alumno(id_alumno) on update cascade on delete cascade,
foreign key(doc) references docente(id_docente) on update cascade on delete cascade,
foreign key(mat) references materia(nombre) on update cascade on delete cascade
) engine innodb;
Saludos desde mexico!!....

Valora esta pregunta


0