Olá, Talyta, tudo bem?
Na aula, vimos o uso de chaves estrangeiras dentro do comando CREATE TABLE, ou seja, no momento da criação da tabela. Nesse caso, usamos algo como:
CREATE TABLE tabelaprodutos (
ID_Produto INT PRIMARY KEY,
Nome_do_Produto VARCHAR (250),
Descrição TEXT,
Categoria INT,
Preco_de_Compra DECIMAL (10,2),
Unidade Varchar (50),
Fornecedor INT,
Data_de_Inclusao DATE,
FOREIGN KEY (Categoria) REFERENCES tabelacategorias (id_categoria),
FOREIGN KEY (Fornecedor) REFERENCES tabelafornecedores (id)
);
Mas, o exercício traz uma situação diferente: ele pede para adicionar uma chave estrangeira a uma tabela que já existe. Para isso, precisamos usar o comando ALTER TABLE, que serve justamente para modificar a estrutura de uma tabela após sua criação.
A resposta correta mostra:
ALTER TABLE produtos
ADD COLUMN fk_fornecedor INTEGER REFERENCES tabelafornecedores(id);
Veja o que acontece aqui:
ALTER TABLE: indica que vamos alterar uma tabela já existente.ADD COLUMN fk_fornecedor INTEGER: cria uma nova coluna chamada fk_fornecedor, do tipo INTEGER, que servirá para armazenar os IDs dos fornecedores.REFERENCES tabelafornecedores(id): estabelece a relação de chave estrangeira com a tabela tabelafornecedores.
No SQLite não é possível usar o comando FOREIGN KEY em uma tabela já existente. Essa é uma diferença de sintaxe entre declarar a FK dentro do CREATE TABLE (como na aula) e adicioná-la depois com ALTER TABLE. Mas destaco que essa é a forma correta de alterar no SQLite, em outros SGBDs, como MySQL Workbench é possível usar o FOREIGN KEY (em um dos tópicos abaixo compartilho o exemplo no Workbench)
Ou seja, as duas formas estão corretas, apenas se aplicam em momentos diferentes do ciclo de criação e modificação da tabela.
E para não ficar colunas repetidas (fornecedor), teremos que dropar primeiro.
Quanto ao comando INTERGER, você pode saber um pouco mais na atividade Para saber mais: tipos de dados
Espero ter ajudado.
Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!