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:
Respostas
respondido por:
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 similares
5 anos atrás
5 anos atrás
9 anos atrás