Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Xing_Ling

[Resolvido] Errno 150 - Chave Estrangeira

Recommended Posts

Eu estava projetando um bd quando me deparei com erro no 150, ja procurei bastante e nao encontrei solução.

Apelo para a experiencia de vocês colegas.

 

[/b]SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `servicosocial` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `servicosocial`;

-- -----------------------------------------------------
-- Table `servicosocial`.`Instituicoes`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`Instituicoes` (
  `NomeInstituicao` VARCHAR(255) NOT NULL ,
  `SecretariaSetor` VARCHAR(255) NOT NULL ,
  `NomeDiretor` VARCHAR(255) NOT NULL ,
  `AnoDeCriacao` YEAR NOT NULL ,
  `CNPJ` CHAR(18) NOT NULL ,
  `Endereco` VARCHAR(255) NOT NULL ,
  `Bairro` VARCHAR(255) NOT NULL ,
  `Municipio` VARCHAR(255) NOT NULL ,
  `CEP` CHAR(9) NOT NULL ,
  `Telefone` CHAR(14) NOT NULL ,
  `Fax` CHAR(14) NULL ,
  `Email` VARCHAR(255) NULL ,
  `NaturezaJuridica` CHAR(7) NOT NULL ,
  `Finalidade` CHAR(19) NOT NULL ,
  `Abrangencia` CHAR(9) NOT NULL ,
  `Setor` CHAR(9) NOT NULL ,
  `PublicoAlvo` CHAR(25) NOT NULL ,
  `PoliticaSocial` CHAR(31) NOT NULL ,
  PRIMARY KEY (`NomeInstituicao`, `SecretariaSetor`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;


-- -----------------------------------------------------
-- Table `servicosocial`.`ServicosSociais`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`ServicosSociais` (
  `SetorUnidade` VARCHAR(255) NOT NULL ,
  `NomeChefiaSetorUnidade` VARCHAR(255) NOT NULL ,
  `Telefone` CHAR(14) NOT NULL ,
  `Fax` CHAR(14) NULL ,
  `Email` VARCHAR(255) NULL ,
  `NumeroAssistentesSociais` SMALLINT NOT NULL ,
  `ProgramasProjetos` TEXT NOT NULL ,
  `Objetivos` TEXT NOT NULL ,
  `Instituicoes_NomeInstituicao` VARCHAR(255) NOT NULL ,
  `Instituicoes_SecretariaSetor` VARCHAR(255) NOT NULL ,
  PRIMARY KEY (`SetorUnidade`, `NomeChefiaSetorUnidade`) ,
  INDEX `fk_ServicosSociais_Instituicoes` (`Instituicoes_NomeInstituicao` ASC, `Instituicoes_SecretariaSetor` ASC) ,
  CONSTRAINT `fk_ServicosSociais_Instituicoes`
	FOREIGN KEY (`Instituicoes_NomeInstituicao` , `Instituicoes_SecretariaSetor` )
	REFERENCES `servicosocial`.`Instituicoes` (`NomeInstituicao` , `SecretariaSetor` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;


-- -----------------------------------------------------
-- Table `servicosocial`.`Contas`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`Contas` (
  `NomeUsuario` VARCHAR(45) NOT NULL ,
  `Senha` VARCHAR(45) NOT NULL ,
  `Categoria` VARCHAR(13) NOT NULL ,
  `NomeCompleto` VARCHAR(255) NOT NULL ,
  `Telefone` VARCHAR(14) NOT NULL ,
  `Email` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`NomeUsuario`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;


-- -----------------------------------------------------
-- Table `servicosocial`.`Estagiarios`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`Estagiarios` (
  `NomeEstagiario` VARCHAR(255) NOT NULL ,
  `ProgramaProjeto` VARCHAR(255) NOT NULL ,
  `NivelEstagio` VARCHAR(255) NOT NULL ,
  `AnoSemestre` CHAR(6) NOT NULL ,
  `CHSemanal` TINYINT NOT NULL ,
  `Remuneracao` DECIMAL(6,2) NOT NULL ,
  `NomeSupervisor` VARCHAR(255) NOT NULL ,
  `CressSupervisor` VARCHAR(5) NOT NULL ,
  `ResumoAtividades` TEXT NOT NULL ,
  `DiasHorariosEstagio` VARCHAR(45) NOT NULL ,
  `Obrigatoriedade` CHAR(3) NOT NULL ,
  `ServicosSociais_SetorUnidade` VARCHAR(255) NULL ,
  `ServicosSociais_NomeChefiaSetorUnidade` VARCHAR(255) NULL ,
  PRIMARY KEY (`NomeEstagiario`, `ProgramaProjeto`) ,
  INDEX `fk_Estagiarios_ServicosSociais` (`ServicosSociais_SetorUnidade` ASC, `ServicosSociais_NomeChefiaSetorUnidade` ASC) ,
  CONSTRAINT `fk_Estagiarios_ServicosSociais`
	FOREIGN KEY (`ServicosSociais_SetorUnidade` , `ServicosSociais_NomeChefiaSetorUnidade` )
	REFERENCES `servicosocial`.`ServicosSociais` (`SetorUnidade` , `NomeChefiaSetorUnidade` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;


-- -----------------------------------------------------
-- Table `servicosocial`.`Estagios`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`Estagios` (
  `NomeInstituicao` VARCHAR(255) NOT NULL ,
  `SecretariaSetor` VARCHAR(255) NOT NULL ,
  `SetorUnidade` VARCHAR(255) NOT NULL ,
  `ProgramaProjeto` VARCHAR(255) NOT NULL ,
  `Periodicidade` VARCHAR(10) NOT NULL ,
  `NumeroHoras` TINYINT NOT NULL ,
  `Individual` BIT NOT NULL ,
  `Grupal` BIT NOT NULL ,
  `OutraSupervisao` BIT NOT NULL ,
  `LeituraTexto` BIT NOT NULL ,
  `Planejamento` BIT NOT NULL ,
  `OutraPreparacao` BIT NOT NULL ,
  `Dificuldades` TEXT NOT NULL ,
  `PlanoEstagio` BIT NOT NULL ,
  `Relatorios` BIT NOT NULL ,
  `DiarioCampo` BIT NOT NULL ,
  `IntervencaoInvest` BIT NOT NULL ,
  `RelatorioSemanal` BIT NOT NULL ,
  `OutraDocumentacao` BIT NOT NULL ,
  `Demanda` TEXT NOT NULL ,
  `Vantagens` TEXT NOT NULL ,
  `Encaminhamentos` TEXT NOT NULL ,
  PRIMARY KEY (`NomeInstituicao`, `SecretariaSetor`, `SetorUnidade`, `ProgramaProjeto`) ,
  INDEX `fk_Estagios_Instituicoes` (`NomeInstituicao` ASC, `SecretariaSetor` ASC) ,
  INDEX `fk_Estagios_ServicosSociais` (`SetorUnidade` ASC) ,
  INDEX `fk_Estagios_Estagiarios` (`ProgramaProjeto` ASC) ,
  CONSTRAINT `fk_Estagios_Instituicoes`
	FOREIGN KEY (`NomeInstituicao` , `SecretariaSetor` )
	REFERENCES `servicosocial`.`Instituicoes` (`NomeInstituicao` , `SecretariaSetor` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION,
  CONSTRAINT `fk_Estagios_ServicosSociais`
	FOREIGN KEY (`SetorUnidade` )
	REFERENCES `servicosocial`.`ServicosSociais` (`SetorUnidade` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION,
  CONSTRAINT `fk_Estagios_Estagiarios`
	FOREIGN KEY (`ProgramaProjeto` )
	REFERENCES `servicosocial`.`Estagiarios` (`ProgramaProjeto` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;


-- -----------------------------------------------------
-- Table `servicosocial`.`Visitas`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `servicosocial`.`Visitas` (
  `NomeProfessor` VARCHAR(255) NOT NULL ,
  `NomeAssistente` VARCHAR(255) NOT NULL ,
  `Data` DATE NOT NULL ,
  `Horario` TIME NOT NULL ,
  `Objetivos` TEXT NOT NULL ,
  `TopicosDiscutidos` TEXT NOT NULL ,
  `Encaminhamentos` TEXT NOT NULL ,
  `NovaVisita` CHAR(3) NOT NULL ,
  `Estagios_NomeInstituicao` VARCHAR(255) NULL ,
  `Estagios_SecretariaSetor` VARCHAR(255) NULL ,
  `Estagios_SetorUnidade` VARCHAR(255) NULL ,
  `Estagios_ProgramaProjeto` VARCHAR(255) NULL ,
  PRIMARY KEY (`NomeProfessor`, `NomeAssistente`, `Data`, `Horario`) ,
  INDEX `fk_Visitas_Estagios` (`Estagios_NomeInstituicao` ASC, `Estagios_SecretariaSetor` ASC, `Estagios_SetorUnidade` ASC, `Estagios_ProgramaProjeto` ASC) ,
  CONSTRAINT `fk_Visitas_Estagios`
	FOREIGN KEY (`Estagios_NomeInstituicao` , `Estagios_SecretariaSetor` , `Estagios_SetorUnidade` , `Estagios_ProgramaProjeto` )
	REFERENCES `servicosocial`.`Estagios` (`NomeInstituicao` , `SecretariaSetor` , `SetorUnidade` , `ProgramaProjeto` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
[b]

O codigo completo tae, mas o problema ocorre na tabela estagios, chave estrangeira ProgramaProjeto.

 

[/b]
------------------------
LATEST FOREIGN KEY ERROR
------------------------
090130 19:44:19 Error in foreign key constraint of table servicosocial/estagios:

	FOREIGN KEY (`ProgramaProjeto` )
	REFERENCES `servicosocial`.`Estagiarios` (`ProgramaProjeto` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci:
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See [url="http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html"]http://dev.mysql.com/doc/refman/5.1/en/inn...onstraints.html[/url]
for correct foreign key definition.
[b]

 

O código foi gerado com o mysql workbench. A versão do meu mysql é 5.1.

Pode estar evidente, mas não consigo detectar o erro.

Alguem saberia me ajudar ?

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

sinceramente nao li tudo pq seu codigo eh bem grande, mas o q em geral ocorre eh q o workbench cria as tabelas com os index e fk tudo junto, aih nao funciona pq ele depende de tabelas q ele ainda nao criou

 

sugiro q você crie as coisas na mao, ou q adicione os FK depois

Compartilhar este post


Link para o post
Compartilhar em outros sites

O codigo ta todo ai para quem quiser testar... o problema ta na fk da tabela estagios fk_Estagios_Estagiarios.

Bem, acho que me enrolei aqui nos codigos... mas olhando bem, a fk de estagios faz referencia a tabela estagiarios, que ja existe.

O interessante é que as 2 outras fk da tabela estagios funcionam perfeitamente, so a fk_Estagios_Estagiarios que nao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, Consegui.

Resolvi criando na tabela estagiarios um indice para programaprojeto, deu certo.

Tambem funciona simplesmente trocando a ordem da PK de estagiarios para (ProgramaProjeto,NomeEstagiario).

So não entendi o pq disso, alguem sabe ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.