Pular para o conteúdo principal

Questão de Banco de Dados — Álgebra Relacional — CESGRANRIO 2024

Banco de DadosÁlgebra Relacional
Código
cg057870
Banca
CESGRANRIO
Órgão
IPEA
Ano
2024
Cargo
TPP ( )

Para um estudo do tema Educação, foram coletados dados de escolas e de professores em todos os municípios brasileiros.

 

Esses dados foram armazenados em duas relações (tabelas), organizadas de acordo com o seguinte modelo relacional:

 

ESCOLA (cod-escola, nome-escola, cod-municipio, quantidade-alunos)
PROFESSOR (CPF, nome-prof, data-nascimento, cod-municipio-residencia, cod-escola-prof)

 

A chave primária de ESCOLA é cod-escola, e a de PROFESSOR é CPF. A coluna cod-escola-prof em PROFESSOR é uma chave estrangeira e indica em que escola o professor leciona. Considere a utilização dos operadores de Projeção (p ou PROJETE), Seleção (σ ou SELECIONE) e Junção ( ou JUNTE) da Álgebra Relacional.

 

Que sequência de operações, em Álgebra Relacional, produz como resultado uma relação R-X com CPF e nome dos professores que NÃO residem no mesmo município onde lecionam?

  1. AR-X ← SELECIONE CPF, nome-prof de PROFESSOR onde cod-municipio-residencia é diferente de cod-municipio
  2. BR-A ← JUNTE PROFESSOR a ESCOLA onde cod-municipio-residencia é diferente de cod-municipio R-X ← PROJETE CPF, nome-prof de R-A
  3. CR-A ← SELECIONE CPF, nome-prof de PROFESSOR R-X ← JUNTE R-A a ESCOLA onde cod-escola-prof = cod-escola
  4. DR-A ← JUNTE PROFESSOR a ESCOLA onde cod-escola-prof = cod-escola R-B ← SELECIONE R-A onde cod-municipio-residencia é diferente de cod-municipio R-X ← PROJETE CPF, nome-prof de R-B
  5. ER-A ← PROJETE CPF, nome-prof de PROFESSOR R-B ← JUNTE R-A a ESCOLA onde cod-escola-prof = cod-escola R-X ← SELECIONE R-B onde cod-municipio-residencia é diferente de cod-municipio
Revelar gabarito e comentário

GabaritoD — R-A ← JUNTE PROFESSOR a ESCOLA onde cod-escola-prof = cod-escola R-B ← SELECIONE R-A onde cod-municipio-residencia é diferente de cod-municipio R-X ← PROJETE CPF, nome-prof de R-B

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, Projeção e Junção

Gabarito: letra D. Para obter CPF e nome dos professores que NÃO residem no mesmo município onde lecionam, é preciso primeiro juntar PROFESSOR com ESCOLA pela chave estrangeira cod-escola-prof = cod-escola (para saber o município da escola onde leciona), depois selecionar as tuplas em que cod-municipio-residencia (do professor) é diferente de cod-municipio (da escola) e, por fim, projetar apenas CPF e nome-prof. A alternativa D é a única que executa exatamente essa sequência: JUNTE → SELECIONE → PROJETE.

A Álgebra Relacional é um conjunto de operações que recebem uma ou mais relações (tabelas) como entrada e produzem uma nova relação como saída — é a propriedade de fechamento. Os três operadores usados na questão são:

  • Seleção (σ ou SELECIONE): filtra linhas (tuplas) que satisfazem uma condição. Ex.: SELECIONE PROFESSOR onde cod-municipio-residencia = 'X' retorna apenas os professores que moram no município X.

  • Projeção (π ou PROJETE): filtra colunas (atributos), eliminando tuplas duplicadas. Ex.: PROJETE CPF, nome-prof de PROFESSOR retorna apenas as colunas CPF e nome-prof.

  • Junção (⋈ ou JUNTE): combina pares de linhas de duas relações com base em uma condição de correspondência entre atributos. Ex.: JUNTE PROFESSOR a ESCOLA onde cod-escola-prof = cod-escola combina cada professor com a escola em que leciona.

A questão pede professores que NÃO residem no mesmo município onde lecionam. Para saber onde o professor leciona, é necessário consultar a tabela ESCOLA, pois o município da escola (cod-municipio) está lá, enquanto o município de residência do professor (cod-municipio-residencia) está em PROFESSOR. Portanto, a junção é o primeiro passo obrigatório — sem ela, não há como comparar os dois municípios.

Vamos aplicar a um exemplo concreto. Suponha que o professor João (CPF 111) more em São Paulo (cod-municipio-residencia = 1) e lecione na Escola A, que fica em Campinas (cod-municipio = 2). A junção de PROFESSOR com ESCOLA pela chave cod-escola-prof = cod-escola produz uma linha com todos os dados de João e da Escola A. A seleção cod-municipio-residencia ≠ cod-municipio mantém essa linha (1 ≠ 2), e a projeção retorna (111, João). Se João morasse em Campinas (1) e a escola também fosse em Campinas (1), a seleção eliminaria a linha, pois 1 = 1.

A pegadinha central está na ordem das operações. A junção deve vir antes da seleção que compara os municípios, porque a coluna cod-municipio (da escola) só existe após a junção. Projetar CPF e nome-prof antes da junção (como nas alternativas C e E) descarta a coluna cod-municipio-residencia, tornando impossível a comparação posterior — a seleção nem poderia ser executada, pois a coluna não existiria mais na relação intermediária.

Guarde a sequência lógica: JUNTE (para obter o município da escola) → SELECIONE (para filtrar quem mora em município diferente) → PROJETE (para exibir apenas CPF e nome). É exatamente nessa ordem que as alternativas se dividem.

Alternativa A — ❌ Incorreta

A alternativa A tenta aplicar a seleção diretamente sobre PROFESSOR, comparando cod-municipio-residencia com cod-municipio. Porém, a coluna cod-municipio não existe na tabela PROFESSOR — ela pertence à tabela ESCOLA. Sem a junção, a seleção é inválida, pois referencia um atributo inexistente na relação de entrada. Além disso, a sintaxe SELECIONE CPF, nome-prof de PROFESSOR mistura projeção com seleção de forma incorreta: a seleção filtra linhas, não colunas.

Alternativa B — ❌ Incorreta

A alternativa B faz a junção corretamente, mas com a condição errada: cod-municipio-residencia é diferente de cod-municipio. A junção deve ser feita pela chave estrangeira cod-escola-prof = cod-escola — é isso que liga o professor à escola onde leciona. Juntar pela condição de municípios diferentes produziria um produto cartesiano filtrado, combinando cada professor com todas as escolas de municípios diferentes, o que não representa corretamente a relação de lecionar. Além disso, a seleção da condição de diferença deveria vir depois da junção pela chave, não como condição da própria junção.

Alternativa C — ❌ Incorreta

A alternativa C projeta CPF e nome-prof de PROFESSOR antes da junção. Isso descarta a coluna cod-municipio-residencia, que é essencial para a comparação. Após a projeção, a relação R-A contém apenas CPF e nome-prof — sem o município de residência. A junção subsequente com ESCOLA não tem como comparar os municípios, pois a informação foi perdida. A seleção final nem sequer é feita; a alternativa termina na junção, retornando todos os professores com suas escolas, sem filtrar quem mora em município diferente.

Alternativa D — ✅ Correta ⟵ GABARITO

A alternativa D executa a sequência correta:

  1. JUNTE PROFESSOR a ESCOLA onde cod-escola-prof = cod-escola — combina cada professor com a escola onde leciona, trazendo o cod-municipio da escola para a relação resultante R-A.

  2. SELECIONE R-A onde cod-municipio-residencia é diferente de cod-municipio — filtra as linhas em que o município de residência do professor difere do município da escola, gerando R-B.

  3. PROJETE CPF, nome-prof de R-B — extrai apenas as colunas solicitadas, gerando R-X.

Essa ordem respeita a dependência entre as operações: a junção cria a relação com ambos os municípios, a seleção filtra as tuplas que atendem à condição, e a projeção apresenta o resultado final com as colunas pedidas.

Alternativa E — ❌ Incorreta

A alternativa E projeta CPF e nome-prof antes da junção, repetindo o erro da alternativa C. A relação R-A fica sem a coluna cod-municipio-residencia, impossibilitando a seleção final que compara os municípios. A seleção cod-municipio-residencia é diferente de cod-municipio seria inválida, pois a coluna cod-municipio-residencia não existe mais em R-A.

NÃO CAIA NESSA!

A banca explora a ordem das operações e a disponibilidade das colunas. Projetar antes da junção (alternativas C e E) parece inofensivo, mas descarta a coluna cod-municipio-residencia, tornando a seleção impossível. Outra armadilha é usar a condição de diferença na própria junção (alternativa B), o que gera um resultado incorreto. A regra de ouro: a junção sempre vem primeiro quando a condição de seleção depende de colunas de ambas as tabelas.

PEGA ESSA DICA!

Para questões de álgebra relacional, identifique quais colunas são necessárias para a condição final e em qual tabela elas estão. Se a condição envolve colunas de duas tabelas, a junção é obrigatória e deve vir antes da seleção. A projeção, quando pede apenas algumas colunas, deve vir por último, após todas as filtragens — assim você não perde colunas necessárias para as etapas intermediárias.

Gabarito: letra D

Link permanente: /questoes/cg057870