Error: Nr. 1005 Can\'t create table

javi87
08 de Julio del 2009
El problema que me surge es el siguiente:

Error executing SQL commands to update table.
MySQL Error Nr. 1005
Can't create table './GestionTareas/#sql-158b_2b.frm' (errno: 150)

Ocurre al tratar de crear una clave ajena en la tabla "Dependencia" hacia la tabla "Tarea", del tipo:

CONSTRAINT `Dependencia_FK_Anterior` FOREIGN KEY (`idProyecto`,`idPaqueteAnterior`, `idTareaAnterior`) REFERENCES `Tarea` (`idProyecto`,`idPaquete`,`id`) ON UPDATE CASCADE

He probado a crear otras claves ajenas en la misma tabla; pero no se porque me da el error, si alguien tuviera idea de porque ocurre.
El código de la base de datos es el siguiente:

CREATE DATABASE IF NOT EXISTS GestionTareas;
USE GestionTareas;

DROP TABLE IF EXISTS `GestionTareas`.`Dependencia`;
CREATE TABLE `GestionTareas`.`Dependencia` (
`idProyecto` varchar(5) NOT NULL,
`idPaqueteAnterior` varchar(5) NOT NULL,
`idPaqueteSiguiente` varchar(5) NOT NULL,
`idTareaAnterior` varchar(5) NOT NULL,
`idTareaSiguiente` varchar(5) NOT NULL,
`retraso` double NOT NULL,
PRIMARY KEY USING BTREE (`idProyecto`,`idPaqueteAnterior`,`idPaqueteSiguiente`,`idTareaAnterior`,`idTareaSiguiente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `GestionTareas`.`Paquete`;
CREATE TABLE `GestionTareas`.`Paquete` (
`id` varchar(5) NOT NULL,
`nombre` varchar(30) NOT NULL,
`explicacion` varchar(200) default NULL,
`duracion` double default '0',
`idProyecto` varchar(5) NOT NULL,
PRIMARY KEY (`id`,`idProyecto`),
KEY `Paquete_Index_Proyecto` (`idProyecto`),
CONSTRAINT `Paquete_FK_Proyecto` FOREIGN KEY (`idProyecto`) REFERENCES `Proyecto` (`acronimo`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `GestionTareas`.`Proyecto`;
CREATE TABLE `GestionTareas`.`Proyecto` (
`acronimo` varchar(5) NOT NULL,
`nombre` varchar(30) NOT NULL,
`explicacion` varchar(200) default NULL,
`fechaComienzo` date default NULL,
`unidadTiempo` char(1) NOT NULL,
PRIMARY KEY (`acronimo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `GestionTareas`.`Tarea`;
CREATE TABLE `GestionTareas`.`Tarea` (
`id` varchar(5) NOT NULL,
`idPaquete` varchar(5) NOT NULL,
`idProyecto` varchar(5) NOT NULL,
`nombre` varchar(30) NOT NULL,
`explicacion` varchar(200) NOT NULL,
`prioridad` int(11) NOT NULL,
`fechaComienzo` date NOT NULL,
`duracion` double NOT NULL,
`comienzoAbsoluto` tinyint(1) NOT NULL,
`comienzoRetraso` double NOT NULL,
`idSuper` varchar(5) default NULL,
PRIMARY KEY (`id`,`idPaquete`,`idProyecto`),
KEY `Tarea_FK_SuperTarea` (`idSuper`),
KEY `Tarea_Index_Proyecto` (`idProyecto`),
KEY `Tarea_Index_Paquete` (`idPaquete`,`idProyecto`),
CONSTRAINT `Tarea_FK_Paquete` FOREIGN KEY (`idPaquete`, `idProyecto`) REFERENCES `Paquete` (`id`, `idProyecto`) ON UPDATE CASCADE,
CONSTRAINT `Tarea_FK_SuperTarea` FOREIGN KEY (`idSuper`) REFERENCES `Tarea` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;