Pular para o conteúdo principal

Questão de Banco de Dados — Álgebra Relacional — INSTITUTO AOCP 2023

Banco de DadosÁlgebra Relacional
Código
qa540170
Banca
INSTITUTO AOCP
Órgão
CODEBA
Ano
2023
Cargo
Ana Por ( )
Uma analista de banco de dados da CODEBA está trabalhando com duas relações, Funcionarios e Departamentos. A relação Funcionarios tem os atributos {ID_Funcionario, Nome, ID_Departamento} e a relação Departamentos tem os atributos {ID_Departamento, Nome_Departamento}. Ela quer obter uma lista de todos os funcionários junto com o nome de seus respectivos departamentos. Nesse cenário, qual das seguintes operações em álgebra relacional representa a consulta desejada por essa analista?
  1. AFuncionarios ∪ Departamentos
  2. BFuncionarios − Departamentos
  3. CFuncionarios × Departamentos
  4. DσFuncionarios.ID_Departamento= Departamentos.ID_Departamento(Funcionarios× Departamentos)
  5. EπNome,Nome_Departamento(Funcionarios)
Revelar gabarito e comentário

GabaritoD — σFuncionarios.ID_Departamento= Departamentos.ID_Departamento(Funcionarios× Departamentos)

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: junção para combinar dados de duas tabelas

Gabarito: letra D. A consulta desejada — listar cada funcionário com o nome do seu departamento — exige combinar as tuplas de Funcionarios e Departamentos que tenham o mesmo ID_Departamento, o que é feito pela operação de junção (⋈), expressa na alternativa D como um produto cartesiano seguido de uma seleção (σ) sobre a condição de igualdade. As demais alternativas usam operações que não relacionam as duas tabelas pela chave estrangeira (união, diferença, produto cartesiano puro ou projeção isolada).

A álgebra relacional é uma linguagem formal de consulta composta por operações que recebem uma ou duas relações (tabelas) como entrada e devolvem sempre uma nova relação como saída — propriedade chamada de fechamento. As operações básicas são: seleção (σ), que filtra linhas (tuplas) que satisfazem um predicado; projeção (π), que filtra colunas (atributos); produto cartesiano (×), que combina todas as linhas de duas tabelas, independentemente de correspondência; união (∪), diferença (−) e intersecção (∩), que operam sobre conjuntos de tuplas; e a junção (⋈), que combina pares de linhas de duas relações com base em uma condição de correspondência entre atributos.

No cenário da questão, temos duas relações ligadas por uma chave estrangeira: Funcionarios.ID_Departamento referencia Departamentos.ID_Departamento. Para obter o nome do departamento de cada funcionário, precisamos combinar cada tupla de Funcionarios com a tupla correspondente de Departamentos — exatamente o que a junção faz. A junção pode ser vista como um produto cartesiano seguido de uma seleção: primeiro combinamos todas as tuplas (produto cartesiano) e depois filtramos apenas os pares em que os ID_Departamento são iguais (seleção). Essa é a expressão da alternativa D.

Um exemplo concreto: se Funcionarios tem as tuplas (1, 'Ana', 10) e (2, 'Bruno', 20), e Departamentos tem (10, 'TI') e (20, 'RH'), o produto cartesiano gera 4 combinações; a seleção com Funcionarios.ID_Departamento = Departamentos.ID_Departamento mantém apenas (1, 'Ana', 10, 10, 'TI') e (2, 'Bruno', 20, 20, 'RH') — cada funcionário com seu departamento. Uma projeção final poderia extrair apenas Nome e Nome_Departamento, mas a questão pede a operação que representa a consulta completa, e a alternativa D já entrega o resultado com todos os atributos combinados.

A pegadinha da banca está em confundir as operações: a união e a diferença exigem relações com esquemas compatíveis (mesmos atributos), o que não é o caso aqui; o produto cartesiano puro gera combinações sem sentido (cada funcionário com todos os departamentos); e a projeção isolada em Funcionarios não traz o nome do departamento. A alternativa D é a única que efetivamente relaciona as duas tabelas pela chave estrangeira.

Guarde a distinção central: para combinar dados de duas tabelas relacionadas por chave estrangeira, use junção (⋈) — que pode ser expressa como σ sobre o produto cartesiano. É exatamente esse critério que separa a alternativa correta das demais.

Alternativa A — ❌ Incorreta

A união (∪) combina tuplas de duas relações que possuem o mesmo esquema (mesmos atributos). Funcionarios e Departamentos têm atributos diferentes ({ID_Funcionario, Nome, ID_Departamento} vs. {ID_Departamento, Nome_Departamento}), portanto a união nem é uma operação válida aqui. Além disso, mesmo que fosse, ela não relacionaria funcionários a seus departamentos — apenas juntaria as linhas das duas tabelas em uma única relação.

Alternativa B — ❌ Incorreta

A diferença (−) retorna as tuplas que estão na primeira relação mas não na segunda, e também exige esquemas compatíveis. Como as duas relações têm atributos distintos, a operação não se aplica. E, conceitualmente, subtrair departamentos de funcionários não produziria a lista desejada — seria apenas um conjunto de funcionários que não aparecem como departamentos, o que não faz sentido no contexto.

Alternativa C — ❌ Incorreta

O produto cartesiano (×) combina todas as tuplas de Funcionarios com todas as tuplas de Departamentos, gerando um resultado com n × m linhas, onde cada funcionário aparece emparelhado com todos os departamentos, independentemente de correspondência. Isso produziria dados incorretos (um funcionário do departamento 10 apareceria também com o departamento 20). Falta a condição de junção — que é justamente o que a alternativa D adiciona.

Alternativa D — ✅ Correta ⟵ GABARITO

Esta expressão representa a junção por equijunção entre as duas relações: primeiro o produto cartesiano Funcionarios × Departamentos combina todas as tuplas; depois a seleção (σ) com o predicado Funcionarios.ID_Departamento = Departamentos.ID_Departamento filtra apenas os pares em que o ID_Departamento do funcionário coincide com o ID_Departamento do departamento. O resultado é exatamente a lista de funcionários com o nome de seus respectivos departamentos. É a forma canônica de expressar uma junção na álgebra relacional.

Alternativa E — ❌ Incorreta

A projeção (π) sobre Funcionarios seleciona apenas os atributos Nome e Nome_Departamento — mas Nome_Departamento não existe na relação Funcionarios (ela só tem ID_Funcionario, Nome e ID_Departamento). Além disso, a projeção opera sobre uma única relação e não combina dados de duas tabelas. Para obter o nome do departamento, seria necessário primeiro fazer a junção com Departamentos e só então projetar.

Gabarito: letra D — a junção (⋈), expressa como σ sobre o produto cartesiano, é a operação que relaciona funcionários a seus departamentos pela chave estrangeira.

Link permanente: /questoes/qa540170