Olá Pessoal.
No caso de uma entidade associativa, em que tenho 2 PFK's(Chaves Primárias e Estrangeiras), como faço para designá-las em SQL?
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!
Olá Pessoal.
No caso de uma entidade associativa, em que tenho 2 PFK's(Chaves Primárias e Estrangeiras), como faço para designá-las em SQL?
Olá Júlio, tudo bem?
Em uma entidade associativa, possui duas chaves primárias que são, ao mesmo tempo, chaves estrangeiras, você poderá ter duas chaves estrangeiras que farão a ligação com as chaves primárias das outras duas tabelas.
O código das tabela associativas ficaria:
CREATE TABLE tabela_associativa (
coluna1 tipo_dado PRIMARY KEY,
coluna2 tipo_dado PRIMARY KEY,
outras_colunas tipo_dado,
FOREIGN KEY (coluna1) REFERENCES outra_tabela1(coluna_pk1),
FOREIGN KEY (coluna2) REFERENCES outra_tabela2(coluna_pk2)
);
Neste caso, coluna1 e coluna2 serão as chaves primárias compostas da tabela associativa.
Cada uma dessas colunas também será uma chave estrangeira, referenciando a chave primária de outra tabela (outra_tabela1 e outra_tabela2).
Espero ter esclarecido.
Qualquer dúvida, compartilhe no fórum.
Abraços e bons estudos!
Tentei fazer conforme a instrução acima. Estou usando o SQLite e deu o seguinte erro:
has more than one primary key.
Como faço para resolver?
Oi Júlio.
Entendi! O erro aponta não permite definir mais de uma coluna como PRIMARY KEY individualmente.
Júlio, você pode testar o seguinte comando abaixo:
CREATE TABLE tabela_associativa (
coluna1 tipo_dado,
coluna2 tipo_dado,
outras_colunas tipo_dado,
PRIMARY KEY (coluna1, coluna2),
FOREIGN KEY (coluna1) REFERENCES outra_tabela1(coluna_pk1),
FOREIGN KEY (coluna2) REFERENCES outra_tabela2(coluna_pk2)
);
A única mudança feita foi na sintaxe da chave composta com o comando PRIMARY KEY (coluna1, coluna2) .
Testei aqui e funcionou! Espero que dê certo aí também!
Fico à disposição. Abraços!
Obrigado! Deu certo!