Xing_Ling 0 Denunciar post Postado Janeiro 30, 2009 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
giesta 29 Denunciar post Postado Janeiro 31, 2009 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
Xing_Ling 0 Denunciar post Postado Janeiro 31, 2009 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
Xing_Ling 0 Denunciar post Postado Fevereiro 1, 2009 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