Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2024

Banco de DadosSQL
Código
qg352876
Banca
Quadrix
Órgão
CRQ - 12ª Região (GO, TO e DF)
Ano
2024
Nível
Superior
Cargo
Analista de T.I.

Imagem da questão


Com referência ao código SQL (Structured Query Language) acima, julgue o item.Na criação da tabela Empresa_Produto_Quimico, ocorrerá um erro de sintaxe, tendo em vista que não é permitido criar uma chave primária contendo dois campos, conforme foi definido na linha 17.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Chave primária composta em SQL

Gabarito: ERRADO (letra E). A afirmação do item é falsa porque o SQL permite, sim, criar uma chave primária composta por dois ou mais campos — exatamente o que a linha 17 do código faz ao definir PRIMARY KEY (Cod_Empresa, Cod_Produto_Quimico). A sintaxe é válida e amplamente utilizada em bancos de dados relacionais para representar relacionamentos muitos-para-muitos, como é o caso da tabela associativa Empresa_Produto_Quimico.

A chave primária é o mecanismo do modelo relacional que identifica de forma única cada linha de uma tabela. Ela pode ser formada por um único atributo (chave simples) ou por uma combinação de dois ou mais atributos (chave composta). A restrição PRIMARY KEY garante duas propriedades fundamentais: a unicidade — não pode haver duas linhas com a mesma combinação de valores — e a não nulidade — nenhum dos campos que compõem a chave pode receber valor NULL. No caso da tabela Empresa_Produto_Quimico, a chave composta (Cod_Empresa, Cod_Produto_Quimico) assegura que cada par de valores seja único, impedindo, por exemplo, que a mesma empresa seja associada ao mesmo produto químico mais de uma vez.

A criação de uma chave primária composta é um recurso essencial para implementar relacionamentos do tipo muitos-para-muitos (N:N) no modelo relacional. Quando duas entidades se relacionam dessa forma, cria-se uma tabela associativa (também chamada de tabela de ligação ou tabela ponte) cuja chave primária é, justamente, a combinação das chaves primárias das duas entidades originais. No código apresentado, Empresa e Produto_Quimico são as entidades, e Empresa_Produto_Quimico é a tabela associativa que as conecta. As linhas 18 e 19 reforçam esse papel ao definir as chaves estrangeiras (FOREIGN KEY) que referenciam as tabelas Empresa e Produto_Quimico, respectivamente.

A sintaxe utilizada na linha 17 segue o padrão SQL para restrições de tabela (table constraints), que são declaradas após a definição das colunas. A forma geral é PRIMARY KEY (coluna1, coluna2, ...), e essa construção é aceita pelos principais SGBDs do mercado, como Oracle, MySQL, PostgreSQL e SQL Server. Portanto, não há qualquer erro de sintaxe na definição da chave primária composta — o erro está na interpretação do item, que afirma ser proibido criar uma chave primária com dois campos.

A pegadinha desta questão é justamente a inversão do conceito: o candidato pode achar que chave primária só pode ter um campo, mas a verdade é que a chave composta é um recurso padrão e necessário em tabelas associativas. Guarde a distinção entre chave simples (um campo) e chave composta (dois ou mais campos) — é exatamente nessa fronteira que o item tenta confundir.

Item — ❌ Errado

A afirmação de que "não é permitido criar uma chave primária contendo dois campos" é incorreta. O SQL permite, sim, a criação de chaves primárias compostas, e a linha 17 do código (PRIMARY KEY (Cod_Empresa, Cod_Produto_Quimico)) é um exemplo válido dessa construção. A chave composta é, inclusive, a solução padrão para implementar relacionamentos muitos-para-muitos em bancos de dados relacionais, como ocorre na tabela associativa Empresa_Produto_Quimico. Portanto, não há erro de sintaxe na criação dessa tabela — o erro está na premissa do item.

Gabarito: letra E (ERRADO).

Link permanente: /questoes/qg352876