Scientist 2 Denunciar post Postado Maio 16, 2012 Antes de criar uma chave estrangeira é obrigatório no CREATE TABLE fazer: KEY (cod_perfil) ? Porque ? Ex: CREATE TABLE IF NOT EXISTS `usuario` ( `cod_usuario` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `senha` varchar(50) NOT NULL, `cod_perfil` int(11) NOT NULL, PRIMARY KEY (`cod_usuario`), UNIQUE KEY `email` (`email`), KEY `cod_perfil` (`cod_perfil`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `usuario` ADD CONSTRAINT `usuario_ibfk_1` FOREIGN KEY (`cod_perfil`) REFERENCES `perfil` (`cod_perfil`); Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 16, 2012 Tenho dúvidas... Seu modelo parece equivocado, porém, como não conheço o requisito, vou considerar que é assim mesmo. Até onde entendi, temos as tabelas usuario e perfil. Como é possível ver, você tem a chave primária COD_USUARIO na tabela usuario e deve ter um COD_PERFIL na tabela perfil e presumo que também seja chave primária. Para atender a chave estrangeira segundo o seu modelo, o comando seria: ALTER TABLE `perfil` ADD CONSTRAINT `perfil_fk_usuario` FOREIGN KEY (`cod_perfil`) REFERENCES `usuario` (`cod_perfil`); Compartilhar este post Link para o post Compartilhar em outros sites
Scientist 2 Denunciar post Postado Maio 17, 2012 É isso mesmo Prog, porém o que gostaria de saber é se faz-se necessária a declaração de um KEY `cod_perfil` (`cod_perfil`) no CREATE TABLE ou pode apenas usar o ALTER TABLE 'perfil' ADD CON... direto Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 17, 2012 KEY ou INDEX vai criar um indice para este campo. É obrigatório que o campo da tabela filha, envolvido na relação, esteja indexado. Uma coisa que pode ter sido uma gafe minha, a relação é aplicada sempre na tabela filha, desta forma, seu comando anterior pode estar correto. Esta é uma relação 1:1 ? Compartilhar este post Link para o post Compartilhar em outros sites
Scientist 2 Denunciar post Postado Maio 17, 2012 não, é 1:N. Eu criei uma foreign key sem antes criar um campo com INDEX (KEY) e funcionou normal, algum problema nisso já que voce disse que era obrigatório a criação de um INDEX Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Maio 17, 2012 O indice é obrigatório no campo da tabela que a chave estrangeira for criada (tabela filha). Se houver indice nos 2 campos da relação, pode haver um ganho de performance (tempo de resposta). No seu primeiro comando você esta criando a chave estrangeira na tabela USUARIO no campo COD_PERFIL, este campo precisa ser indexado. Compartilhar este post Link para o post Compartilhar em outros sites