ENEM, perguntado por carlamelo2474, 9 meses atrás

O banco de dados de um sistema de controlebancário implementado por meio de um SGBD relacionalpossui a relação Cliente, com as informaçõesapresentadas a seguir, em que a chave primária darelação é grifada.Cliente(nroCliente, nome, endereco,data_nascimento, renda, idade)Para essa relação, foram criados dois índicessecundários: IndiceIdade, para o atributo idade, eIndiceRenda, para o atributo renda. Existe um tipo deserviço nesse banco cujo alvo são tanto os clientes quepossuem menos de 40 anos de idade quanto aqueles quepossuem renda mensal superior a 30.000 reais. Pararecuperar esses clientes, a seguinte expressão deconsulta em SQL foi utilizada:SELECT nome, enderecoFROM ClienteWHERE idade < 40 OR renda > 30000;Com o aumento do número de clientes dessebanco, essa consulta passou a apresentar problemas dedesempenho. Verificou-se, então, que o otimizador deconsultas não considerava os índices existentes paraidade e renda, e a consulta era realizada mediantevarredura seqüencial na relação Cliente, tornando essaconsulta onerosa. O plano de execução da consulta,usado pelo otimizador, é apresentado na árvore deconsulta abaixo, na qual B e F representam as operaçõesde projeção e de seleção, respectivamente.Para que o otimizador de consultas passasse autilizar os índices, a solução encontrada foi elaborar aconsulta em dois blocos separados — um que recupera osclientes com idade inferior a 40 anos, e outro querecupera os clientes com renda mensal superior a 30.000reais — para, então, juntar as tuplas das duas relaçõesgeradas.Considerando a situação apresentada, faça o que se pedea seguir.A Escreva o código de uma consulta em SQL quecorresponda à solução proposta.B Desenhe a árvore de consulta para essa solução.

#ENADE

Anexos:

Soluções para a tarefa

Respondido por bryanavs
0

Podemos afirmar que na alternativa a) teremos que tratar da técnica de otimização que consiste em substituir disjunções (OR) entre colunas indexadas por UNION e para b) πnome, endereço "U".

Vamos aos dados/resoluções:  

Para a)temos:  

SELECT nome,endereco  

FROM Cliente

WHERE idade < 40  

UNION

SELECT nome, endereco

FROM Cliente

WHERE renda > 3000;

Para b) veremos que  πnome, endereço "U" se "dividindo" para  Ωidade < 40 ; Ωrenda > 3000 no caso em específico para cada cliente.

espero ter ajudado nos estudos, bom dia :)

Perguntas interessantes