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?
AR-X ← SELECIONE CPF, nome-prof de PROFESSOR onde cod-municipio-residencia é diferente de cod-municipio
BR-A ← JUNTE PROFESSOR a ESCOLA onde cod-municipio-residencia é diferente de cod-municipio R-X ← PROJETE CPF, nome-prof de R-A
CR-A ← SELECIONE CPF, nome-prof de PROFESSOR R-X ← JUNTE R-A a ESCOLA onde cod-escola-prof = cod-escola
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
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-municipionã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:
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.
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.
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.