marlowe 0 Denunciar post Postado Março 7, 2007 Olá pessoal. estou com um problema que é o seguinte: tenho um cadastro com dados de funcionários que possue muitos campos. Por ser extenso, mesmo se tratando da mesma entidade, resolvi dividir em duas tabelas. Usando o InnoDB, acredito que posso manter a integridade referencial, ligando as duas com chave estrangeira. Tentei fazer isso usando as duas chaves primárias (cpf e CPF_1), mas está dando erro. Se alguém puder ajudar, serei grato. Abaixo, o SQL das tabelas e o erro apontado pelo MySQL CREATE TABLE `dados_1` ( `nome` varchar(60) character set latin1 NOT NULL, `cpf` char(11) collate latin1_general_ci NOT NULL, `matricula` varchar(9) collate latin1_general_ci NOT NULL, `end_residecial` varchar(60) character set latin1 NOT NULL, `bairro` varchar(30) character set latin1 NOT NULL, `cidade` varchar(20) character set latin1 NOT NULL, `cep` varchar(8) collate latin1_general_ci NOT NULL, `data_nasc` date NOT NULL, `orgao` char(3) collate latin1_general_ci NOT NULL, `cargo` varchar(50) character set latin1 NOT NULL, `nivel_plano_1` char(3) collate latin1_general_ci NOT NULL, `nivel_plano_2` varchar(20) collate latin1_general_ci NOT NULL, `admitido_em` date NOT NULL, `sal_base` decimal(12,2) NOT NULL, `sal_liquido` decimal(12,2) NOT NULL, `sal_bruto` decimal(12,2) NOT NULL, `mensalidade` decimal(12,2) NOT NULL, `inserido_por` varchar(20) collate latin1_general_ci default 'Marcos e Júnior', `inserido_em` date NOT NULL, `alterado_por` varchar(10) character set latin1 NOT NULL, `alterado_em` date NOT NULL, PRIMARY KEY (`cpf`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='tabela sias dados urgentes'; CREATE TABLE `dados_2` ( `CPF_1` varchar( 11 ) COLLATE latin1_general_ci NOT NULL , `rg` varchar( 30 ) COLLATE latin1_general_ci NOT NULL , `fone_res` varchar ( 9 ) COLLATE latin1_general_ci NOT NULL , `celular` varchar( 12 ) COLLATE latin1_general_ci NOT NULL , `email` varchar( 60 ) CHARACTER SET latin1 NOT NULL , `nome_da_mae` varchar( 80 ) CHARACTER SET latin1 NOT NULL , `nome_do_pai` varchar( 80 ) CHARACTER SET latin1 NOT NULL , `estado_civil` varchar( 15 ) COLLATE latin1_general_ci NOT NULL , `dependentes` char( 2 ) COLLATE latin1_general_ci NOT NULL , `serv_empreg` set( 'servidor', 'empregado' ) COLLATE latin1_general_ci NOT NULL , `concursado` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL , `unidade_trab` varchar ( 60 ) CHARACTER SET latin1 NOT NULL , `end_trabalho` varchar ( 60 ) CHARACTER SET latin1 NOT NULL , `bairro_trab` varchar ( 60 ) COLLATE latin1_general_ci NOT NULL , `cep_trab` varchar( 8 ) COLLATE latin1_general_ci NOT NULL , `fone_trab` varchar( 12 ) COLLATE latin1_general_ci NOT NULL , `funcao` varchar( 50 ) CHARACTER SET latin1 NOT NULL , `renda_fam` decimal( 12, 2 ) NOT NULL , `outra_profissao` varchar( 80 ) CHARACTER SET latin1 NOT NULL , `carga_horaria` int( 4 ) NOT NULL , `horario_trab` varchar( 10 ) COLLATE latin1_general_ci NOT NULL , `hora_extra` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL , `produtividade` set( 'sim', 'não' ) COLLATE latin1_general_ci NOT NULL , `socio_desde` date NOT NULL , `ativ_artistica_cult` varchar( 60 ) CHARACTER SET latin1 NOT NULL , `tipo_moradia` varchar( 50 ) CHARACTER SET latin1 NOT NULL , `area_de_risco` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL , `escolaridade_formacao` varchar ( 60 ) CHARACTER SET latin1 NOT NULL , `estuda` set ( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL , `horario_estudo` varchar( 10 ) CHARACTER SET latin1 NOT NULL , `cursos_qualificacao` text CHARACTER SET latin1 NOT NULL , `acao_judicial` set ( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL , `isonomia` set( 'sim' , 'não' ) CHARACTER SET latin1 NOT NULL , `processos` text CHARACTER SET latin1 NOT NULL , `andamento_proc` text CHARACTER SET latin1 NOT NULL , `inserido_por` varchar( 10 ) CHARACTER SET latin1 NOT NULL , `inserido_em` date NOT NULL , `alterado_por` varchar ( 10 ) CHARACTER SET latin1 NOT NULL , `alterado_em` date NOT NULL , PRIMARY KEY ( `CPF_1` ) FOREIGN KEY ( `CPF_1` ) REFERENCES dados_1( cpf ) ON DELETE CASCADE ) ENGINE = InnoDB DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci COMMENT = 'segunda tabela do SIAS Principal' Mensagens do MySQL : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY (`CPF_1`) REFERENCES dados_1(cpf) ON DELETE CASCADE ) ENGINE=InnoDB' at line 42 Compartilhar este post Link para o post Compartilhar em outros sites
maia.alb 0 Denunciar post Postado Março 7, 2007 repare que os tipos de dados são diferentes: `cpf` char(11) `CPF_1` varchar( 11 ) sendo que eles tem que ser do mesmo tipo espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
marlowe 0 Denunciar post Postado Março 7, 2007 Obrigado, mas não resolveu. Vou continuar pesquisando Compartilhar este post Link para o post Compartilhar em outros sites