Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Error Code: 1822. Failed to add the foreign key constraint.

Não dá para fazer a conexão de FK? Já tentei deixar : `

PRIMARY KEY (NUMERO,CODIGO)

PRIMARY KEY (NUMERO) => o que eu caracterizo como certo, de acordo com o modelo lógico do professor

Porém sem resultado. Sempre dá erro ao tentar vincular um FK. Tntei até pelo assistente.

`

DROP TABLE NOTAS;
CREATE TABLE IF NOT EXISTS NOTAS(
    NUMERO VARCHAR(5) NOT NULL,
    DATA_VENDA  DATE NULL,
    CPF VARCHAR(11) NOT NULL,
    MATRICULA VARCHAR(5) NOT NULL,
    IMPOSTO FLOAT NULL
);

ALTER TABLE NOTAS ADD CONSTRAINT FK_CLIENTES_CPF
FOREIGN KEY (CPF) REFERENCES CLIENTES (CPF);

ALTER TABLE NOTAS ADD CONSTRAINT FK_Vendedores_MATRICULA
FOREIGN KEY (MATRICULA) REFERENCES Vendedores (MATRICULA);

drop TABLE itens_notas;
CREATE TABLE itens_notas(
    NUMERO VARCHAR(5) NOT NULL,
    CODIGO VARCHAR(10) NOT NULL,
    QUANTIDADE INT,
    PRECO FLOAT,
    PRIMARY KEY (NUMERO,CODIGO)
);

ALTER TABLE itens_notas ADD CONSTRAINT FK_NOTAS_NUMERO
FOREIGN KEY (NUMERO)
REFERENCES notas(NUMERO);

ALTER TABLE itens_notas ADD CONSTRAINT FK_PRODUTOS_CODIGO
FOREIGN KEY (CODIGO)
REFERENCES PRODUTOS (CODIGO);
4 respostas

Achei o erro, foi falha minha de não declarar primary key na tabela NOTAS.

Mas ainda estou em dúvida se é para declarar ou não o campo CODIGO como Primary Key na tabela itens_notas. Me parece errado.

Olá Leo, tudo bem?

Fico feliz em saber que você conseguiu resolver o seu problema :).

Sim, você deve declarar tanto o campo número, como o campo código como chave primária da tabela itens_notas, os dois campos juntos formam a chave primária composta.

Como esta tabela armazena os produtos vendidos em cada nota separadamente, ela precisa ter o número da nota associado a cada produto, porém, como pode ser vários produtos e o número da nota precisará ser repetido várias vezes, apenas o número da nota não pode ser utilizado como chave primária, mas realizando a combinação do número da nota com o código do produto, pode ser formado uma chave primaria composta, já que a combinação formará valores únicos.

O instrutor aborda sobre este assunto, na atividade 11 Finalizando a criação do banco.

Mas qualquer dúvida é só falar Leo e bons estudos!

Mas Danielle, no modelo lógico do professor, ele mostra como apenas chave FK : Nesse link abaixo mostra uma imagem falando:

Número (PK) e (FK - .....) Codigo (FK - .....)

Não deveria aparecer os dois como PK ?

https://cursos.alura.com.br/course/mysql-dml-manipulacao-de-dados/task/56801

solução!

Verdade Leo, nesta imagem deveria aparecer os dois campos como PK, essa imagem é a mesma utilizada pelo instrutor, na atividade 11 Finalizando a criação do banco, ele até explica que a imagem está sem está informação. Na opnião do instrutor da atividade(https://cursos.alura.com.br/course/mysql-dml-manipulacao-de-dados/task/56801) a tabela é criada com os dois campos como chave primária.

Opnião do instrutor da atividade Criando tabela de itens de fiscais

Devido a isso Leo, estou passando para o pessoal responsável, para que está atividade seja revisada.

Qualquer nova dúvida é só falar Leo e bons estudos!