Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Imposible crear las claves foraneas de tablas

Estas en el tema de Imposible crear las claves foraneas de tablas en el foro de Mysql en Foros del Web. Buenas, de nuevo los molesto con una pregunta tonta tal vez pero realmente no he podido hacerlo y creanme que he leido muchos temas y ...
  #1 (permalink)  
Antiguo 21/03/2011, 14:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 2 meses
Puntos: 0
Imposible crear las claves foraneas de tablas

Buenas, de nuevo los molesto con una pregunta tonta tal vez pero realmente no he podido hacerlo y creanme que he leido muchos temas y foros y no consigo crear las clavez foraneas para relacionar dos tablas.

Tengo las siguientes tablas:

CREATE TABLE IF NOT EXISTS `pepsistema2`.`avance` (
`FechaAvance` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`CodObra` VARCHAR(30) CHARACTER SET 'utf8',
`Descripavance` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`ObservAvance` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`NroOrden` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`eliminado` BIT(1) NULL DEFAULT 0 ,
PRIMARY KEY (`FechaAvance`, `CodObra`) ,
INDEX `fk_avance_ordenservicio1` (`NroOrden` ASC) ,
INDEX `fk_avance_obra1` (`CodObra` ASC) ,
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_spanish2_ci;

CREATE TABLE IF NOT EXISTS `pepsistema2`.`mdemateriales` (
`CodMaterial` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`Descripcion` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`Unidad` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`Precio` DOUBLE NOT NULL ,
`IdTipoDesglose` INT(11) NOT NULL ,
PRIMARY KEY (`CodMaterial`) ,
INDEX `fk_mdemateriales_mdetipodesglose1` (`IdTipoDesglose` ASC) ,
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_spanish2_ci;

CREATE TABLE IF NOT EXISTS `pepsistema2`.`avance_material` (
`FechaAvance` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`CodObra` VARCHAR(30) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`CodMaterial` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`NroOrden` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,
`IdTipoDesglose` DOUBLE NOT NULL DEFAULT 17 ,
`Cantidad` DOUBLE NOT NULL DEFAULT 0 ,
`Precio` DOUBLE NOT NULL DEFAULT 0 ,
`eliminado` BIT(1) NOT NULL ,
PRIMARY KEY (`FechaAvance`, `CodObra`, `CodMaterial`) ,
INDEX `NroOrden` (`NroOrden` ASC, `IdTipoDesglose` ASC, `Cantidad` ASC, `Precio` ASC) ,
INDEX `Precio` (`Precio` ASC) ,
INDEX `Cantidad` (`Cantidad` ASC) ,
INDEX `fk_avance_material_avance1` (`FechaAvance` ASC, `CodObra` ASC) ,
INDEX `fk_avance_material_mdemateriales1` (`CodMaterial` ASC) ,
INDEX `fk_avance_material_mdetipodesglose1` (`IdTipoDesglose` ASC) ,
CONSTRAINT `fk_avance_material_avance1`
FOREIGN KEY (`FechaAvance` , `CodObra` )
REFERENCES `pepsistema2`.`avance` (`FechaAvance` , `CodObra` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_avance_material_mdemateriales1`
FOREIGN KEY (`CodMaterial` )
REFERENCES `pepsistema2`.`mdemateriales` (`CodMaterial` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_spanish2_ci
COMMENT = 'Materiales usados por las contratistas para las obras' ;


La primeras dos tablas las puedo crear sin problema, pero al crear la tabla avance_material, la cual tiene las claves foraneas, me da el Error Code: 1005, he intentado de mil maneras y no ha sido posible crear esa relacion con las tablas, no se realmente que este haciendo mal.

Y esto es solo una parte, toda la base de datos (59 tablas) me esta dando el mismo error en las tablas que tiene claves foraneas.

Agradezco su ayuda
  #2 (permalink)  
Antiguo 21/03/2011, 15:29
 
Fecha de Ingreso: marzo-2011
Ubicación: Palmira
Mensajes: 35
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Imposible crear las claves foraneas de tablas

Hola,

Tenes el campo cod_obra así:

`pepsistema2`.`avance`
Código MySQL:
Ver original
  1. `CodObra` VARCHAR(30) CHARACTER SET 'utf8',

`pepsistema2`.`avance_material`
Código MySQL:
Ver original
  1. `CodObra` VARCHAR(30) CHARACTER SET 'utf8' COLLATE 'utf8_spanish2_ci' NOT NULL ,

intentá colocar el campo cod_obra de la misma manera en las dos tablas y contas como te va.

Saludos
  #3 (permalink)  
Antiguo 21/03/2011, 18:28
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Imposible crear las claves foraneas de tablas

Nacho, el campo esta igual en las 2 tablas, ese no es el problema.

El problema es que has puesto engine MyISAM en la tabla mdemateriales, y luego al intentar hacer la referencia desde la tabla avance_material no puede, ya que MyISAM no admite referencias.

Debes cambiar el engine de mdemateriales de MyISAM a InnoDB.

Un saludo!
  #4 (permalink)  
Antiguo 21/03/2011, 19:02
 
Fecha de Ingreso: marzo-2011
Ubicación: Palmira
Mensajes: 35
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Imposible crear las claves foraneas de tablas

javiDP tienes razon, no me fijé en ese importante punto, menos mal somos toda una comunidad que ayuda,

saludos
__________________
Porque lo importante no es saber, sino tener el correo del que sabe ....

Etiquetas: claves, imposible, tablas, foreignkey
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:05.