3
respostas

Como o banco de dados sabe que é fk?

Oie, espero que estejam bem!! Tenho uma dúvida..

Após criar a tabela:

CREATE TABLE produtos (
    id INT PRIMARY KEY,
    nome VARCHAR(255),
    descricao TEXT,
    categoria INT,
    preco DECIMAL(10, 2),
    unidade VARCHAR(50),
    fornecedor INT,
    data_inclusao DATE
)

eu devo incluir a chave estrangeira na tabela de produtos para relacioná-la com o fornecedor do produto, através do campo id da tabela fornecedores.

A solução indica essa resposta:

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

porém não ficou claro para mim: pq nesse caso eu não preciso referenciar a coluna fornecedor como FOREIGN KEY?

algo como:

ALTER TABLE produtos
FOREIGN KEY (fornecedor) REFERENCES tabelafornecedores(id)

No caso da solução, eu ficaria com duas colunas de fornecedor? fornecedor e fk_fornecedor?

Muito obrigada!

3 respostas

Oi Camila, tudo bem?

Se você já tem a coluna fornecedor na tabela produtos e deseja usá-la como chave estrangeira, a maneira mais assertiva é utilizando o comando FOREIGN KEY, como você mencionou.

Ao utilizar o script sem o FOREIGN KEY ele criará duas colunas fornecedor e fk_fornecedor.

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

Portanto, o comando correto seria:

ALTER TABLE produtos
ADD FOREIGN KEY (fornecedor) REFERENCES tabelafornecedores(id);

Dessa forma, você está dizendo explicitamente que a coluna fornecedor na tabela produtos é uma chave estrangeira que referencia o campo id na tabela tabelafornecedores. Isso evita a duplicação de colunas.

Espero ter esclarecido e atividade será encaminhada para correção.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

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

Monalisa, boa noite, como o aluno anterior mencionou, a resposta da questão da aula 2 está incorreta. Pois a resposta apontada como a correta nele, é a que ele indica a criação de uma nova tabela, e não apenas a indicação da tabela fornecedor como a Foreign Key.

Se selecionamos a opção indicado por você, e que nós também vemos como certa, o exercicio indica como errado.

Oi Camila e Gabriela.

Cometi um equívoco e testei os comandos da atividade na ferramenta MySQL Workbench, ao invés do SQLite. As diferenças entre as ferramentas pode influenciar em alguns comandos.

Para alterar a duplicação da tabela e inserir o comando de chave estrangeira. Devemos seguir os seguintes passos:

  • Apagar a coluna fornecedor da tabela produtos.

    ALTER TABLE produtos DROP COLUMN fornecedor;
    
  • Em seguida, utilizar o comando da atividade:

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

Portanto, reforço que para adicionar uma chave estrangeira a uma tabela já existente consiste em adicionar uma nova coluna na tabela que será a chave estrangeira.

Desculpe pelo transtorno causado e fico à disposição.

Abraços.