Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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`);É 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
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 ?
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
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.
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: