Buscar

BancodeDadosI-4aLista2012.1-GabaritoQ1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CURSO: SISTEMAS DE INFORMAÇÃO
 DISCIPLINA: BANCO DE DADOS I
 PROFESSOR: DANIEL SCHNEIDER
 PERÍODO: 2012.1
 DOCUMENTO: LISTA #4 DE EXERCÍCIOS - GABARITO Q1
 
Álgebra Relacional e SQL
 
Questão 1) Considere o seguinte esquema relacional:
 
VOO(VID, ORIGEM, DESTINO, DISTANCIA, HSAIDA, HCHEGADA)
AVIAO(AID, NOME, FAIXA_COBERTA)
CERTIFICADO(EID, AID)
EMPREGADO(EID, NOME, SALARIO)
 
Observe que a tabela EMPREGADO descreve pilotos e outros tipos de empregado. Todo piloto é certificado 
para algum avião, e somente os pilotos são certificados para voar.
 
Escreva as consultas abaixo em Álgebra Relacional: (algumas podem não ter solução em AR)
 
1) Listar o código dos pilotos certificados para algum avião 'Boeing'.
 
π eid (σ nome=‘Boeing’ (AVIAO ⊳⊲ CERTIFICADO)
 
2) Listar o nome dos pilotos certificados para algum avião 'Boeing'.
 
π empregado.nome (σ aviao.nome=‘Boeing’ (AVIAO ⊳⊲ CERTIFICADO ⊳⊲ EMPREGADO))
 
3) Listar o código de todos os aviões que podem ser usados em vôos (sem parada) entre Salvador e Natal.
 
R1 ← σ origem=‘Salvador’ ∧ destino=‘Natal’ (VOO))
R ← π aid (σ faixa_coberta>distancia (AVIAO × R1))
 
4) Selecionar os vôos que podem ser pilotados por todo piloto cujo salário é maior que R$ 5000.
 
π vid (σ distancia<faixa_coberta ∧salario>5000 (VOO ⊳⊲ AVIAO ⊳⊲ CERTIFICADO ⊳⊲ EMPREGADO)))
 
5) Encontrar o nome dos pilotos que podem operar aviões com uma faixa coberta maior que 3000 milhas mas 
que não sejam certificados para nenhum avião 'Boeing'.
 
R1 ← π eid (σ faixa_coberta>3000 (AVIAO ⊳⊲ CERTIFICADO)))
R ←π empregado.nome (EMPREGADO ⊳⊲ (R1 − π eid (σ aviao.nome=‘Boeing’ (AVIAO ⊳⊲ CERTIFICADO))))
 
6) Encontrar o código dos empregados que recebem o maior salário.
 
A estratégia é primeiro encontrar todos os empregados que não possuem o maior salário. Substraia essa lista da 
lista original (completa) dos empregados, e o que restará serão os empregados com o maior salário.
 
E1 ← EMPREGADO
E2 ← EMPREGADO
E3 ← π E2.eid ( σ E1.salary>E2.salary (E1 x E2) )
R ← (π eid (E1)) − E3
 
7) Encontrar o código dos empregados que recebem o segundo maior salário.
 
A estratégia é semelhante à do exercício anterior. Primeiro encontramos todos os empregados que não 
possuem o maior salário. Remova estes empregados da lista original de empregados e o que sobra é a lista dos 
empregados com o maior salário. Remova em seguida a lista dos empregados mais bem pagos da lista original 
de empregados, e o que sobra é a lista dos empregados que recebem o segundo melhor salário juntamente 
com o resto dos empregados. Finalmente encontre a lista dos empregados mais bem pagos dessa nova lista. O 
resultado será a lista dos empregados com o segundo maior salário.
 
E1 ← EMPREGADO
E2 ← EMPREGADO
E3 ← π E2.eid ( σ E1.salario>E2.salario (E1 x E2) )
E4 ← E2 ⊳⊲ E3
E5 ← E2 ⊳⊲ E3
E6 ← π E5.eid ( σ E4.salario>E5.salario (E4 x E5) )
R ← (π eid (E3)) − E6
 
8) Encontrar o código dos pilotos certificados para o maior número de aviões.
 
Esta consulta não pode ser expressa em álgebra relacional porque não existe um operador COUNT disponível!
 
9) Encontrar o código dos pilotos certificados para exatamente três aviões.
 
ANULADA
 
10) Encontrar o código dos empregados que não são pilotos.
 
π eid (EMPREGADO) - π eid (CERTIFICADO)

Outros materiais