Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Chaves

Olá, no final do video é mencionado que a chave estrangeira sempre tem que estar relacionada a uma chave key, isso seria sempre ou pode existir outra forma de relacionar outra coluna utilizando a chave estrangeira? e se sim, é muito utilizado ou não?

1 resposta

Ei! Tudo bem, Gabriele?

Sua dúvida sobre o uso de chaves estrangeiras no SQLite e bancos de dados relacionais em geral é excelente e mexe com os fundamentos do design de tabelas em SQL!

Sim, por regra conceitual e padrão do SQL, a chave estrangeira (FOREIGN KEY) sempre deve apontar para uma coluna que garanta a unicidade dos dados na tabela de destino. Quase sempre essa coluna será a chave primária (PRIMARY KEY).

No entanto, existe uma exceção. Você pode, sim, relacionar uma chave estrangeira a outra coluna que não seja a chave primária, desde que essa outra coluna tenha a restrição UNIQUE aplicada a ela. O banco de dados exige isso para garantir a integridade referencial: ele precisa ter certeza absoluta de que o valor que você está puxando aponta para uma única linha específica e não para vários registros duplicados.

E isso é muito utilizado? Não, na prática do mercado essa abordagem é raramente utilizada. O padrão absoluto da indústria é sempre relacionar a chave estrangeira diretamente com a chave primária da tabela correspondente. Desviar desse padrão costuma deixar a modelagem de dados mais confusa, complexa de dar manutenção e pode prejudicar a performance das suas instruções SQL e consultas.

Conteúdo para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.

Espero ter ajudado e qualquer dúvida, compartilhe conosco.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado