5
respostas

ADD CONSTRAINT fk_fornecedor está correcto?

Olá Alura,

Fiquei com uma duvida no exercício da aula 11 relacionando tabelas por meio de chaves estrangeiras.

Se já temos uma coluna Fornecedor na tabela de produtos não entendi o porquê de irmos adicionar mais uma coluna com o mesmo nome Fornecedor, pesquisei no chat GPT e ele deu essa resposta infra.

Sintaxe Correta para Adicionar a Chave Estrangeira Como você já tem a coluna fornecedor na tabela produtos, você não precisa criar uma nova coluna para adicionar a chave estrangeira. A única coisa que falta é formalizar a relação entre a coluna fornecedor da tabela produtos e a coluna id da tabela fornecedores.

A sintaxe correta para adicionar essa chave estrangeira seria:

ALTER TABLE produtos ADD CONSTRAINT fk_fornecedor FOREIGN KEY (fornecedor) REFERENCES fornecedores(id);

Gostava de saber qual é a resposta final que está certa?

5 respostas

Olá, Ricardo, tudo bem?

Seu raciocínio está correto. Em alguns SGBDs, não é necessário criar uma nova coluna; basta alterá-la com o comando ALTER TABLE. No entanto, o SQLite possui uma limitação que impede essa alteração diretamente. Se você tentar executar o comando sugerido pelo ChatGPT, receberá o seguinte erro:

Captura de tela exibindo o erro de sintaxe ao tentar alterar uma tabela no SQLite usando o comando ALTER TABLE produtos ADD CONSTRAINT fk_fornecedor FOREIGN KEY (fornecedor) REFERENCES fornecedores(id)

Observe que ele aponta um erro de sintaxe.

Então, neste caso, a melhor solução seria primeiro apagar a coluna "fornecedor" da tabela "produtos". Em seguida, você pode executar o comando para alterar a tabela "produtos", adicionando uma nova coluna com uma chave que referencie a tabela "fornecedores", como indicado na alternativa. Esse passo a passo está detalhado neste outro tópico, que trata da mesma questão.

Espero ter esclarecido e fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá tudo bem?

Eu fui no tópico que você mandou eu ir mas depois de ter colado a solução que você mencionou, apagar a coluna fornecedor e depois fazer um alter table... como pode ver em baixo, não funcionou dessa forma para mim, pode confirmar isso na imagem que mostro em anexo mas consegui fazer de outra maneira que parece ser a mais correta que também mostro na imagem em anexo com um visto a vermelho.

E agora gostava de saber afinal o que está bem ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Depois de alterar o nome da coluna para fk_fornecedor, quando fui tentar associar a chave estrangeira a uma tabela que já existe o SQLite só permite da seguinte maneira:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Está correcto a informação que disse em supra?

Oi Ricardo!

Nessa atividade, o objetivo é estabelecer uma relação entre as tabelas produtos e fornecedores. Note que a atividade utiliza uma tabela chamada produtos, que é diferente da tabela tabeladeprodutos usada no projeto do curso. Na tabela produtos não há chave estrangeira, nós teremos que criá-la.

Percebi que você está tentando executar o código que compartilhei na tabela tabeladeprodutos. Essa tabela já possui uma chave estrangeira criada no comando CREATE TABLE, então o código não funcionará, pois você estará tentando excluir uma coluna que já faz referência a outra tabela.

Portanto, usando a tabela produtos você pode seguir os passos que recomendei: excluir a coluna atual e recriá-la fazendo referência à tabela fornecedores. Ou, você pode seguir o procedimento que o ChatGPT sugeriu no seu print: criar uma nova tabela com as relações corretas e depois excluir a tabela antiga.

Abaixo, segue um gif mostrando a execução do código de criação da tabela produtos, seguido dos comandos:

ALTER TABLE produtos DROP COLUMN fornecedor;
ALTER TABLE produtos ADD COLUMN fornecedor INTEGER REFERENCES tabelafornecedores(id);

gif demonstrando o código em execução

Peço que faça o teste com a tabela da atividade em questão, produtos.

Abraços!

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