Ver Mensaje Individual
  #7 (permalink)  
Antiguo 16/02/2011, 12:13
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Foreign key error

Conceptualmente tu error es que quieres manejar los "accesos" con una única tabla y lo que existe es una relación entre los usuarios del sistema, que pueden ser alumnos o profesores.
Én todo caso, los alumnos y los profesores deben estar vinculados a Acceso, y no al revés. Eso simplificaría mucho el panorama. Implicaría que un ALumno y un Profesor primero deben ser Usuarios y luego registrarse, pero es una posibilidad. De lo contrario el sistema se hace más complejo porque hay que separar la relación de Acceso para Alumnos y para Profesores (cosa lógica porque habitualmente un alumno no es profesor en la institución y viceversa).

Esto sería lo que te digo:
Código MySQL:
Ver original
  1. CREATE TABLE Alumnos(
  2.           DNI CHAR(9),
  3.           Usuario VARCHAR(10),
  4.           `Password` VARCHAR(10),
  5.           Nombre VARCHAR(50),
  6.           fechanacimiento DATE,
  7.           dirección VARCHAR(50),
  8.           teléfono VARCHAR(50),
  9.           email VARCHAR(50),
  10.           PRIMARY KEY(DNI),
  11.           FOREIGN KEY(Usuario,`Password`) REFERENCES Acceso(Usuario,`Password`) ON UPDATE CASCADE ON DELETE CASCADE
  12.           );
  13.  
  14.       CREATE TABLE Cursos(
  15.           Id INT,
  16.           Nombre VARCHAR (50),
  17.           Descripción VARCHAR (100),
  18.           n_horas INT,
  19.           fechainicio DATE,
  20.           fechafin DATE,
  21.           PRIMARY KEY(Id)
  22.           );
  23.  
  24.       CREATE TABLE Matrícula(
  25.           DNI CHAR(9),
  26.           CodCurso INT,
  27.           PRIMARY KEY(DNI, CodCurso),
  28.           FOREIGN KEY(CodCurso) REFERENCES Cursos(Id) ON UPDATE CASCADE ON DELETE CASCADE,
  29.           FOREIGN KEY(DNI) REFERENCES Alumnos(DNI) ON UPDATE CASCADE ON DELETE CASCADE
  30.           );
  31.  
  32.       CREATE TABLE Profesores(
  33.           DNI CHAR(9),
  34.           Usuario VARCHAR(10),
  35.           Password VARCHAR(10),
  36.           Nombre VARCHAR(50),
  37.           Dirección VARCHAR(50),
  38.           Teléfono VARCHAR(50),
  39.           Correo VARCHAR(50),
  40.           Fechaincorporación DATE,
  41.           PRIMARY KEY(DNI),
  42.           FOREIGN KEY(Usuario,`Password`) REFERENCES Acceso(Usuario,`Password`) ON UPDATE CASCADE ON DELETE CASCADE
  43.           );
  44.  
  45.       CREATE TABLE Cursos_Profesores(
  46.           DNI CHAR(9),
  47.           CodCurso INT,
  48.           PRIMARY KEY(CodCurso),
  49.           FOREIGN KEY(DNI) REFERENCES Profesores(DNI) ON UPDATE CASCADE ON DELETE CASCADE,
  50.           FOREIGN KEY(CodCurso) REFERENCES Cursos(Id) ON UPDATE CASCADE ON DELETE CASCADE
  51.           );
  52.  
  53.       CREATE TABLE acceso(
  54.         Usuario VARCHAR(10),
  55.         Password VARCHAR(10),
  56.         PRIMARY KEY(Usuario, Password)
  57.         );
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)