Pular para o conteúdo principal

Questão de Banco de Dados — Álgebra Relacional — FGV 2025

Banco de DadosÁlgebra Relacional
Código
fg169067
Banca
FGV
Órgão
MPU
Ano
2025
Cargo
Ana
João é analista de banco de dados do MPU e precisa analisar as consultas que estão impactando o desempenho do banco de dados BDProc no PostgreSQL. Para isso, ele decidiu escrever as consultas SQL como expressões da álgebra relacional.   Observe a consulta SQL a seguir.   SELECT processo_id FROM Processos WHERE autor = “Maria” AND situacao = “Ativo”   Na álgebra relacional, a expressão correspondente que João deve escrever é:
  1. A\piautor, situacao (σ\sigma processo_id=(Processos, “Maria”, “Ativo”))
  2. B\piprocesso_id(σ\sigma autor = “Maria” \land situacao = “Ativo” (Processos))
  3. C\sigmaprocesso_id(Processos) (π\pi autor = “Maria”, situacao = “Ativo”))
  4. Dσ\sigma (autor = “Maria” \cap situacao = “Ativo”, processo_id (Processos))
  5. E(autor = “Maria” \cup situacao = “Ativo”) \bowtie πprocessoid(Processos)\pi processo_id (Processos)
Revelar gabarito e comentário

GabaritoB — \piprocesso_id(\sigma autor = “Maria” \land situacao = “Ativo” (Processos))

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

Álgebra Relacional: Seleção e Projeção

Gabarito: letra B. A consulta SQL filtra linhas da tabela Processos (condição autor = 'Maria' AND situacao = 'Ativo') e depois projeta apenas a coluna processo_id — na álgebra relacional, isso corresponde a aplicar primeiro a seleção (σ) sobre a relação Processos e, em seguida, a projeção (π) sobre o resultado, exatamente como expresso na alternativa B.

A álgebra relacional é uma linguagem formal de consulta baseada na teoria de conjuntos, proposta por E.F. Codd em 1970. Ela define um conjunto de operações que recebem uma ou mais relações (tabelas) como entrada e produzem uma nova relação como saída — propriedade conhecida como fechamento. As duas operações centrais para esta questão são:

  • Seleção (σ): filtra linhas (tuplas) que satisfazem um predicado. É equivalente à cláusula WHERE do SQL. Exemplo: σ autor = 'Maria' AND situacao = 'Ativo' (Processos) retorna todas as tuplas da tabela Processos que atendem à condição.

  • Projeção (π): seleciona colunas (atributos) específicas, eliminando tuplas duplicadas no resultado. É equivalente à lista de colunas do SELECT. Exemplo: π processo_id (R) retorna apenas a coluna processo_id da relação R.

A ordem das operações é crucial: primeiro filtramos as linhas (seleção) e depois escolhemos as colunas (projeção). Se fizéssemos a projeção antes, perderíamos os atributos necessários para avaliar a condição do WHERE. Por isso, a expressão correta é π processo_id (σ autor = 'Maria' ∧ situacao = 'Ativo' (Processos)).

A banca explora justamente a confusão entre os papéis de cada operador: a seleção opera sobre linhas (tuplas), enquanto a projeção opera sobre colunas (atributos). Além disso, é comum trocar os símbolos ou inverter a ordem das operações, como fazem as alternativas incorretas.

Guarde a fronteira: seleção = WHERE (linhas) e projeção = SELECT (colunas). É exatamente nessa distinção que as alternativas se dividem.

Seleção (σ)Projeção (π)filtra linhasseleciona colunasπ processo_id (σ condição (Processos))LEVELsoulevel.com.br
Seleção e Projeção na Álgebra Relacional — só Seleção (σ): filtra linhas; só Projeção (π): seleciona colunas; Seleção (σ)∩Projeção (π): π processo_id (σ condição (Processos))

Alternativa A — ❌ Incorreta

A alternativa A escreve π autor, situacao (σ processo_id = (Processos, 'Maria', 'Ativo')). Há dois erros graves: (1) a projeção deveria ser sobre processo_id, não sobre autor, situacao; (2) a seleção está com sintaxe inválida — σ processo_id = (Processos, 'Maria', 'Ativo') não é uma expressão de seleção válida, pois mistura atributo com valores de forma incorreta. A seleção correta exige um predicado sobre os atributos, como σ autor = 'Maria' ∧ situacao = 'Ativo' (Processos).

Alternativa B — ✅ Correta ⟵ GABARITO

A alternativa B apresenta π processo_id (σ autor = 'Maria' ∧ situacao = 'Ativo' (Processos)). A ordem está correta: primeiro a seleção filtra as tuplas que atendem à condição autor = 'Maria' AND situacao = 'Ativo', e depois a projeção seleciona apenas o atributo processo_id. Isso corresponde exatamente à consulta SQL do enunciado.

Alternativa C — ❌ Incorreta

A alternativa C escreve σ processo_id (Processos) (π autor = 'Maria', situacao = 'Ativo'). Aqui há uma inversão completa: a seleção está sendo aplicada sobre processo_id (que é um atributo, não uma condição) e a projeção está recebendo valores ('Maria', 'Ativo') em vez de nomes de colunas. Além disso, a sintaxe está fragmentada e não representa uma expressão válida da álgebra relacional.

Alternativa D — ❌ Incorreta

A alternativa D usa σ (autor = 'Maria' ∩ situacao = 'Ativo', processo_id (Processos)). O erro está no uso do símbolo de interseção (∩) entre condições dentro da seleção. Na álgebra relacional, a conjunção lógica (AND) é representada pelo símbolo ∧ (ou simplesmente pela justaposição das condições), não pela interseção de conjuntos. A interseção é uma operação binária entre relações, não entre predicados.

Alternativa E — ❌ Incorreta

A alternativa E propõe (autor = 'Maria' ∪ situacao = 'Ativo') ⋈ (π processo_id (Processos)). Aqui há dois problemas: (1) a união (∪) é usada indevidamente para combinar condições — o correto seria a conjunção lógica (∧); (2) a junção (⋈) é uma operação binária que combina tuplas de duas relações com base em uma condição, mas não é apropriada para filtrar uma única relação com base em predicados simples. A consulta original não envolve junção de tabelas.

Gabarito: letra B

Link permanente: /questoes/fg169067