Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/11/2012, 12:17
Amphoth3ra
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 1
Problema con tabla con claves foráneas

El contexto es el siguiente, tengo en total en mi DB seis tablas, una de ellas, la última, tiene 3 claves foráneas que hacen referencia a 3 claves de otras tablas.

El detalle de las mismas es el siguiente:

Código MySQL:
Ver original
  1. CREATE TABLE Polichile (
  2.                       rut_polichile VARCHAR(10) NOT NULL,  
  3.                       nombre_polichile VARCHAR(30) NOT NULL,
  4.                       cargo VARCHAR(30) NOT NULL,
  5.                       PRIMARY KEY(rut_polichile)
  6.  
  7. CREATE TABLE CentroEducacional (
  8.                       id_institucion INT NOT NULL,
  9.                       nombre_institucion VARCHAR(30) NOT NULL,
  10.                       PRIMARY KEY(id_institucion)
  11.  
  12. CREATE TABLE Delito (
  13.                       id_delito INT NOT NULL,
  14.               nombre_delito VARCHAR(30) NOT NULL,
  15.               nivel_gravedad INT NOT NULL,
  16.                   PRIMARY KEY(id_delito)
  17.                     ) ENGINE=InnoDB;
  18.  
  19. CREATE TABLE Alumno ( rut_alumno VARCHAR(10) NOT NULL,
  20.               nombre_alumno VARCHAR(30) NOT NULL,
  21.                       edad INT NOT NULL,
  22.                       id_institucion INT NOT NULL,
  23.                       PRIMARY KEY(rut_alumno),
  24.                       FOREIGN KEY(id_institucion) REFERENCES CentroEducacional(id_institucion) ON UPDATE CASCADE ON DELETE CASCADE
  25.                     ) ENGINE=InnoDB;
  26.  
  27. CREATE TABLE Antecedente (
  28.                        rut_alumno VARCHAR(10) NOT NULL,
  29.                id_documento INT NOT NULL,
  30.                        sentencia VARCHAR(30) NULL,
  31.                        PRIMARY KEY(rut_alumno, id_documento),                            
  32.                        FOREIGN KEY(rut_alumno) REFERENCES Alumno(rut_alumno) ON UPDATE CASCADE ON DELETE CASCADE
  33.                          ) ENGINE=InnoDB;
  34.  
  35. CREATE TABLE Antecedente_delito (
  36.                         id_delito INT NOT NULL,
  37.                     id_documento INT NOT NULL,
  38.                         fecha DATE NOT NULL,
  39.                         rut_polichile VARCHAR(10) NOT NULL,
  40.                         PRIMARY KEY(id_delito, id_documento, fecha),
  41.                         INDEX(id_delito),
  42.                         FOREIGN KEY(id_delito) REFERENCES Delito(id_delito) ON UPDATE CASCADE ON DELETE CASCADE,
  43.                         INDEX(id_documento),
  44.                         FOREIGN KEY(id_documento) REFERENCES Antecedente(id_documento) ON UPDATE CASCADE ON DELETE CASCADE,
  45.                         INDEX(rut_polichile),
  46.                         FOREIGN KEY(rut_polichile) REFERENCES Polichile(rut_polichile) ON UPDATE CASCADE ON DELETE CASCADE
  47.                       ) ENGINE=InnoDB;

En la última tabla anteriormente mencionada, antecedentes_delito, puedo sin problemas declarar las claves id_delito y rut_polichile como claves foráneas que hacen referencias a las claves del mismo nombre de sus respectivas tablas. Sin embargo, mi problema se da en que no puedo declarar la clave id_documento como clave foránea, y de acuerdo a la información que se me proporciona vía el comando SHOW ENGINE INNODB STATUS, aparentemente la estoy declarando mal.

Código MySQL:
Ver original
  1. INDEX(id_documento),
  2. FOREIGN KEY(id_documento) REFERENCES Antecedente(id_documento) ON UPDATE CASCADE ON DELETE CASCADE

La tabla donde está la clave a la cual se le hace referencia
Código MySQL:
Ver original
  1. CREATE TABLE Antecedente (
  2.                        rut_alumno VARCHAR(10) NOT NULL,
  3.                id_documento INT NOT NULL,
  4.                        sentencia VARCHAR(30) NULL,
  5.                        PRIMARY KEY(rut_alumno, id_documento),                            
  6.                        FOREIGN KEY(rut_alumno) REFERENCES Alumno(rut_alumno) ON UPDATE CASCADE ON DELETE CASCADE
  7.                          ) ENGINE=InnoDB;

Todo el resto de las tablas se puede declarar sin problemas.

¿Alguna sugerencia?

Saludos!