Ir para conteúdo

POWERED BY:

Arquivado

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

Scientist

Criação de Chave Estrangeira

Recommended Posts

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

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

É 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

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

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

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

×

Informação importante

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