errno:150 mysql

montver
10 de Junio del 2008
hola,
Espero que alguien me pueda ayudar.
Resulta que intento crear tablas con varias claves foraneas y la opcion INNODB, pero me da error y no soy capaz de saber que significa.

ERROR que me da:
can't create table BD/Estado.frm (errno:150)

Muchas gracias

cqc
10 de Junio del 2008
Señores yo ando en algo como esto:
CREATE TABLE r_problemaxinforme(
codinfser INT NOT NULL,
cantidad INT NOT NULL,
codproblema INT NOT NULL,
codequipo INT NOT NULL,
numserie INT NOT NULL,
codir SMALLINT NOT NULL,
codcli INT DEFAULT 0 NOT NULL,
PRIMARY KEY (codinfser, codproblema, codequipo, numserie, codir, codcli),
CONSTRAINT Refr_lineainformes291 FOREIGN KEY (codinfser, codequipo, numserie, codir, codcli)
REFERENCES r_lineainformes(codinfser, codir, codequipo, numserie, codcli) ON DELETE CASCADE,
CONSTRAINT Refr_problema301 FOREIGN KEY (codproblema)
REFERENCES r_problema(codproblema)
)ENGINE=INNODB
;

ERROR 1005 (HY000): Can't creare table '.dbr_problemaxinforme.frm' (errno: 150)

Es una tabla creada a partir de otras 2, que hereda su clave de otras 2, osea una entidad débil. Todas las tablas son INNODB, están indexadas. No se que puede estar pasando. Alguna idea? Gracias

Edeldir
10 de Junio del 2008
En otra seccion de esta web creo ke konteste hoy lo mismo
Hay ke crear un indice antes del campo de la foreign key:
key segment_part_segment_id (segment_id),
foreign key (segment_id) references segment(id),

por ejemplo

Eduardo Cortes
10 de Junio del 2008
Podrias corregir este, me sigue saliendo el error hacien lo que indicas, una tabla si se corrio como indicas, esta no

CREATE TABLE `membresia_impresor` (
`Id_Tipo_Membresia_Impresor` VARCHAR(30) NOT NULL,
`Limiteimpresiones` INTEGER(6) NOT NULL,
`Descripcion` VARCHAR(30) NULL,
PRIMARY KEY(`Id_Tipo_Membresia_Impresor`)
)
TYPE=InnoDB;

CREATE TABLE `membresia_cliente` (
`Id_Tipo_Membresia_Empresa` VARCHAR(30) NOT NULL,
`Limitepersonal` INTEGER(6) NOT NULL,
`Descripcion` VARCHAR(30) NOT NULL,
PRIMARY KEY(`Id_Tipo_Membresia_Empresa`)
)
TYPE=InnoDB;

CREATE TABLE `PropiedadesImpresora` (
`idPropiedadesImpresora` INTEGER(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`Descripcion` VARCHAR(30) NULL,
PRIMARY KEY(`idPropiedadesImpresora`)
)
TYPE=InnoDB;

CREATE TABLE `tipo_usuario` (
`Id_Tipo_Usuario` TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
`Rol` VARCHAR(30) NOT NULL,
`Descripcion` VARCHAR(50) NULL,
PRIMARY KEY(`Id_Tipo_Usuario`)
)
TYPE=InnoDB;

CREATE TABLE `TipoTransaccion` (
`idTipoTransaccion` INTEGER(2) UNSIGNED NOT NULL AUTO_INCREMENT,
`Descripcion` VARCHAR(30) NOT NULL,
`Operacion` ENUM('Suma','Resta') NOT NULL DEFAULT 'Suma',
`Observaciones` TEXT NULL,
PRIMARY KEY(`idTipoTransaccion`)
)
TYPE=InnoDB;

CREATE TABLE `administrador` (
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador_2` INTEGER(3) UNSIGNED NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NOT NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`FechadeAlta` DATE NOT NULL DEFAULT '0000-00-00',
`FechadeBaja` DATE NULL,
PRIMARY KEY(`Id_Administrador`),
INDEX `administrador_FKIndex1`(`Id_Administrador_2`),
FOREIGN KEY(`Id_Administrador_2`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Cliente` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL,
`Id_Tipo_Membresia_Empresa` VARCHAR(30) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`Rutaimagenes` VARCHAR(255) NULL,
`Fechadealta` DATE NOT NULL DEFAULT '0000-00-00',
`Fechadebaja` DATE NULL,
PRIMARY KEY(`Id_Cliente`),
INDEX `Cliente_FKIndex1`(`Id_Tipo_Membresia_Empresa`),
INDEX `Cliente_FKIndex2`(`Id_Administrador`),
INDEX `Cliente_index1904`(`Id_Cliente`),
FOREIGN KEY(`Id_Tipo_Membresia_Empresa`)
REFERENCES `membresia_cliente`(`Id_Tipo_Membresia_Empresa`)
ON DELETE SET NULL
ON UPDATE NO ACTION,
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `impresor` (
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Administrador` INTEGER(3) UNSIGNED NOT NULL,
`Id_Tipo_Membresia_Impresor` VARCHAR(30) NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Direccion1` VARCHAR(30) NOT NULL,
`Direccion2` VARCHAR(30) NOT NULL,
`Telefono` VARCHAR(15) NULL,
`Email` VARCHAR(50) NOT NULL,
`CodigoPostal` INTEGER(6) UNSIGNED NOT NULL,
`Localidad` VARCHAR(30) NOT NULL,
`Municipio` VARCHAR(30) NOT NULL,
`Estado` VARCHAR(30) NOT NULL,
`RFC` VARCHAR(15) NOT NULL,
`Fechadealta` DATE NULL,
`Fechadebaja` DATE NULL,
PRIMARY KEY(`Id_Impresor`),
INDEX `impresor_FKIndex1`(`Id_Tipo_Membresia_Impresor`),
INDEX `impresor_FKIndex2`(`Id_Administrador`),
INDEX `impresor_index1907`(`Id_Impresor`),
FOREIGN KEY(`Id_Tipo_Membresia_Impresor`)
REFERENCES `membresia_impresor`(`Id_Tipo_Membresia_Impresor`)
ON DELETE SET NULL
ON UPDATE NO ACTION,
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `usuario` (
`Id_Usuario` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Cliente` INTEGER(5) UNSIGNED NULL,
`Id_Tipo_Usuario` TINYINT(2) UNSIGNED NULL,
`Id_Administrador` INTEGER(3) UNSIGNED NULL,
`Id_Impresor` INTEGER(5) UNSIGNED NULL,
`Nombre` VARCHAR(30) NOT NULL,
`Clave` VARCHAR(50) NOT NULL,
`Email` VARCHAR(30) NOT NULL,
`Status` CHAR(1) NOT NULL,
`Fecha_Alta` DATE NOT NULL DEFAULT '0000-00-00',
`Fecha_Baja` DATE NULL,
PRIMARY KEY(`Id_Usuario`),
INDEX `usuario_FKIndex1`(`Id_Administrador`),
INDEX `usuario_FKIndex2`(`Id_Tipo_Usuario`),
INDEX `usuario_FKIndex3`(`Id_Cliente`),
INDEX `usuario_FKIndex4`(`Id_Impresor`),
FOREIGN KEY(`Id_Administrador`)
REFERENCES `administrador`(`Id_Administrador`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Tipo_Usuario`)
REFERENCES `tipo_usuario`(`Id_Tipo_Usuario`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
TYPE=InnoDB;

CREATE TABLE `Servicios` (
`idServicios` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Descripcion` VARCHAR(50) NULL,
`Precio` DECIMAL NULL,
`Observasiones` TEXT NULL,
PRIMARY KEY(`idServicios`),
INDEX `Servicios_FKIndex1`(`Id_Impresor`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

-- ------------------------------------------------------------
-- Especilizacion del Cliente como Persona
-- ------------------------------------------------------------

CREATE TABLE `Persona` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Nombre` VARCHAR(20) NULL,
`Materno` VARCHAR(20) NULL,
`Paterno` VARCHAR(20) NULL,
`Sexo` ENUM('M','F') NULL,
INDEX `Persona_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Persona_index1663`(`Nombre`, `Materno`, `Paterno`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Impresora` (
`idImpresora` INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Descripcion` VARCHAR(50) NOT NULL,
`FechaActivacion` DATE NULL,
`ImpresoraActiva` BOOL NULL DEFAULT 'False',
`CostoBasicoDeImpresion` DECIMAL NULL,
`PrecioBasicoDeImpresion` DECIMAL NULL,
`DireccionIP` VARCHAR(15) NULL,
PRIMARY KEY(`idImpresora`),
INDEX `Impresora_FKIndex1`(`Id_Impresor`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Escuela` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Nombre` VARCHAR(100) NOT NULL,
`Nivel` ENUM('Primaria','Secundaria','Preparatoria','Profesional') NULL,
INDEX `Escuela_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Escuela_index1658`(`Nombre`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

-- ------------------------------------------------------------
-- Especializacion de cliente como empresa
-- ------------------------------------------------------------

CREATE TABLE `Empresa` (
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`RazonSocial` VARCHAR(100) NOT NULL,
`Giro` ENUM('Servicio','Comercio','Industria') NOT NULL,
INDEX `Empresa_FKIndex1`(`Id_Cliente`),
UNIQUE INDEX `Empresa_index1653`(`RazonSocial`),
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

-- ------------------------------------------------------------
-- Cuenta de Servicios
--
-- Cuando un cliente quiere imprimir en un centro de impresion tiene que ir al centro de impresion a pagar o solicitar credito por el servicio, la cuenta esta formada por un conjunto de transacciones entre el cliente y el centro de impresion
-- ------------------------------------------------------------

CREATE TABLE `Cuenta` (
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`SaldoInicial` DECIMAL NOT NULL DEFAULT '0',
`TotalAbono` DECIMAL NOT NULL DEFAULT '0',
`TotalCargo` DECIMAL NOT NULL DEFAULT '0',
`SaldoActual` DECIMAL NOT NULL DEFAULT '0',
`FechaApertura` DATE NOT NULL,
`Observaciones ` TEXT NULL,
PRIMARY KEY(`Id_Impresor`, `Id_Cliente`),
INDEX `Cuenta_FKIndex1`(`Id_Impresor`),
INDEX `Cuenta_FKIndex2`(`Id_Cliente`),
FOREIGN KEY(`Id_Impresor`)
REFERENCES `impresor`(`Id_Impresor`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Impresora_has_PropiedadesImpresora` (
`idImpresora` INTEGER(5) UNSIGNED NOT NULL,
`idPropiedadesImpresora` INTEGER(5) UNSIGNED ZEROFILL NOT NULL,
`PropiedadImpresionActiva` BOOL NULL,
`CostoPropiedadimpresion` DECIMAL NULL,
`PrecioPropiedadImpresion` DECIMAL NULL,
PRIMARY KEY(`idImpresora`, `idPropiedadesImpresora`),
INDEX `Impresora_has_PropiedadesImpresora_FKIndex1`(`idImpresora`),
INDEX `Impresora_has_PropiedadesImpresora_FKIndex2`(`idPropiedadesImpresora`),
FOREIGN KEY(`idImpresora`)
REFERENCES `Impresora`(`idImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`idPropiedadesImpresora`)
REFERENCES `PropiedadesImpresora`(`idPropiedadesImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `SolicitudDeImpresion` (
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`idServicios` INTEGER(6) UNSIGNED NOT NULL,
`idImpresora` INTEGER(5) UNSIGNED NOT NULL,
`FechaSolicitud` DATE NOT NULL,
`FechaEntrega` DATE NULL,
`Liberada` BOOL NULL DEFAULT 'False',
PRIMARY KEY(`NoSolicitud`),
INDEX `SolicitudDeImpresion_FKIndex3`(`idImpresora`),
INDEX `SolicitudDeImpresion_FKIndex3`(`idServicios`),
INDEX `SolicitudDeImpresion_FKIndex3`(`Id_Cliente`),
FOREIGN KEY(`idImpresora`)
REFERENCES `Impresora`(`idImpresora`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`idServicios`)
REFERENCES `Servicios`(`idServicios`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Cliente`)
REFERENCES `Cliente`(`Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `OrdenImpresion` (
`idOrdenImpresion` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`FechaImpresion` DATE NULL,
`EstadoDeImpresion` ENUM('En Impresion','Impresa','Reimprimiendo','En Pausa','Cancelada') NULL DEFAULT 'En Impresion',
`ImpresionOK` BOOL NULL DEFAULT 'False',
`Observaciones` TEXT NULL,
PRIMARY KEY(`idOrdenImpresion`),
INDEX `OrdenImpresion_FKIndex1`(`NoSolicitud`),
FOREIGN KEY(`NoSolicitud`)
REFERENCES `SolicitudDeImpresion`(`NoSolicitud`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Documento` (
`idDocumento` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`NoSolicitud` INTEGER(6) UNSIGNED NOT NULL,
`NombreDocumento` TEXT NULL,
`TipoDocumento` ENUM('TXT','DOC','XLS','PDF') NULL,
`Fecha` DATE NULL,
`SizeenKbytes` DECIMAL NULL,
PRIMARY KEY(`idDocumento`, `NoSolicitud`),
INDEX `Documento_FKIndex1`(`NoSolicitud`),
FOREIGN KEY(`NoSolicitud`)
REFERENCES `SolicitudDeImpresion`(`NoSolicitud`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE `Transaccion` (
`idTransaccion` INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id_Cliente` INTEGER(5) UNSIGNED NOT NULL,
`Id_Impresor` INTEGER(5) UNSIGNED NOT NULL,
`idTipoTransaccion` INTEGER(2) UNSIGNED NOT NULL,
`Fecha` DATE NOT NULL,
`Importe` DECIMAL NOT NULL,
`Descripcion` VARCHAR(50) NULL,
PRIMARY KEY(`idTransaccion`),
INDEX `Transaccion_FKIndex1`(`idTipoTransaccion`),
INDEX `Transaccion_FKIndex2`(`Id_Impresor`, `Id_Cliente`),
FOREIGN KEY(`idTipoTransaccion`)
REFERENCES `TipoTransaccion`(`idTipoTransaccion`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(`Id_Impresor`, `Id_Cliente`)
REFERENCES `Cuenta`(`Id_Impresor`, `Id_Cliente`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;


Jose Manuel
10 de Junio del 2008
Tb recordad que las dos tablas debes del tipo InnoDB, sino tampoco funcionará.

keto
10 de Junio del 2008
hola montver yo no tengo la solucion pero tengo el mismo problema si llego a ver que es te digo si me gustaria que vos me contestes
chau gracias