Pular para o conteúdo principal

Questão de Banco de Dados — Formas normais — FUNDATEC 2026

Banco de DadosFormas normais
Código
qg685906
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Banco de Dados
Considere a tabela VENDA(id_venda, id_cliente, nome_cliente, id_produto, nome_produto, quantidade, valor_unitario) em um banco de dados MySQL. Um analista percebe que o banco apresenta redundâncias e decide normalizar a estrutura antes de otimizar as consultas. Após decompor a tabela até a 3FN, ele obtém as relações CLIENTE(id_cliente, nome_cliente), PRODUTO(id_produto, nome_produto, valor_unitario) e VENDA(id_venda, id_cliente, id_produto, quantidade). Assinale a alternativa que apresenta a consulta SQL correta para retornar o nome do cliente, o nome do produto e o valor total de cada venda após a normalização.
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoA — [imagem]

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”.

Normalização e Consultas SQL em Banco de Dados Relacional

Gabarito: letra A. A consulta correta utiliza a cláusula INNER JOIN para combinar as tabelas normalizadas (venda, cliente e produto) por meio de suas chaves estrangeiras (id_cliente e id_produto), permitindo o cálculo do valor total de cada venda (quantidade * valor_unitario) e a exibição dos nomes correspondentes.

Após a normalização para a 3FN, os dados que antes estavam em uma única tabela foram distribuídos em três relações distintas. Para recuperar informações que agora residem em tabelas diferentes, é necessário realizar a junção (join) dessas tabelas. A alternativa A utiliza a sintaxe correta do SQL para realizar essa operação, estabelecendo as condições de junção (ON) que garantem a integridade dos dados retornados e ordenando o resultado pelo valor total de forma decrescente.

Alternativa A — ✅ Correta ⟵ GABARITO

Esta alternativa está correta pois utiliza INNER JOIN para relacionar as tabelas venda, cliente e produto através de suas chaves primárias e estrangeiras. O cálculo v.quantidade * p.valor_unitario é aplicado corretamente a cada linha, e a ordenação ORDER BY valor_total DESC atende ao requisito de listar as vendas pelo maior valor.

Alternativa B — ❌ Incorreta

Esta alternativa falha ao tentar selecionar colunas de tabelas diferentes (nome_cliente, nome_produto) sem realizar a junção (join) entre elas. Em SQL, para acessar dados de múltiplas tabelas, é obrigatório definir o relacionamento entre elas, caso contrário, o banco de dados não saberá como combinar os registros.

Alternativa C — ❌ Incorreta

Embora utilize junções, a consulta aplica incorretamente a função de agregação SUM combinada com um GROUP BY por id_venda. Como a estrutura normalizada já separa os dados, não há necessidade de agrupar por venda para calcular o valor total de cada item, e o uso de SUM sem o contexto adequado de agregação pode gerar resultados imprecisos ou erros de sintaxe dependendo do modo do SQL.

Alternativa D — ❌ Incorreta

O erro principal aqui é o uso da cláusula WHERE valor_total > 0. No SQL, o alias definido no SELECT (valor_total) não pode ser referenciado diretamente na cláusula WHERE, pois o WHERE é processado antes da projeção das colunas. Além disso, o uso de LEFT JOIN é desnecessário neste caso, pois espera-se que toda venda possua um cliente e um produto associados.

Alternativa E — ❌ Incorreta

Esta alternativa utiliza a função de agregação MAX com GROUP BY, o que retornaria apenas o valor máximo de uma venda específica em vez de listar o valor total de cada venda individualmente, alterando o resultado esperado da consulta.

PEGA ESSA DICA!

Ao realizar consultas em tabelas normalizadas, lembre-se sempre de: (1) identificar as chaves de ligação; (2) utilizar JOIN para unir as tabelas; e (3) evitar o uso de aliases de colunas calculadas dentro da cláusula WHERE.

Link permanente: /questoes/qg685906