Baixe o app para aproveitar ainda mais
Prévia do material em texto
Faculdade de Computação – FACOM/UFMS Disciplina: Banco de Dados II Processamento de Consultas Considere o esquema de banco de dados relacional Biblioteca mostrado abaixo, que é usado para registrar livros, leitores e empréstimos de livros. Considere, também, as seguintes consultas especificadas para o banco de dados Biblioteca: a) Quantas cópias do livro intitulado “A Tribo Perdida” existem na unidade da biblioteca cujo nome é “Central”? pi Qt_copia ((σ Nome_unidade='Central' (Unidade_Biblioteca)) ⊗ (Livro_Copias ⊗ ( σ Titulo='A Tribo Perdida'(Livro)))) b) Para cada livro que é emprestado da unidade Central e cuja Data_devolucao é hoje, recupere o título do livro, o nome e o endereço do usuário. R1 ¬ pi Cod_unidade (σ Nome_unidade='Central' (Unidade_Biblioteca)) R2 ¬ pi Cod_livro, Nr_cartao ((σ Data_devolucao='hoje' (Livro_Emprestimos)) ⊗ R1) RESULT ¬ pi Titulo, Nome, Endereco (Livro ⊗ Usuario ⊗ R2) c) Recupere o nome, endereço e número de livros emprestados para todos os usuários que possuem mais de cinco livros emprestados. R1 (Nr_cartao, Total_livros_emp) ¬ Nr_cartao ℑ COUNT(Cod_livro) (Livros_Emprestimos) R2 ¬ σ Total_livros_emp > 5 (R1) RESULT ¬ pi Nome, Endereco,Total_livros_emp (R2 ⊗ Usuario) Considere, ainda, as seguintes informações: – Todas as relações estão ordenadas fisicamente pelo atributo chave. – Todas as relações possuem um índice primário, especificado sobre o atributo chave. Exercício 1 Analise as operações de seleção presentes nas três consultas para o banco de dados biblioteca e defina qual o método (algoritmo) melhor se aplica para implementar cada situação. Faça suposições adicionais sobre os atributos para refinar sua resposta. Exercício 2 Implementação de junção por loop aninhado Exemplo a ser considerado (OP6 vista em sala): Funcionario ⊗ Dnr = Dnumero Departamento Número de buffers disponíveis na memória: nb = 7 (do mesmo tamanho de um bloco de disco). A relação Departamento (D) possui rd = 50 registros armazenados em bd = 10 blocos de disco. A relação Funcionario (F) possui rf = 6000 registros armazenados em bf = 2000 blocos de disco. Usando a relação F no loop externo (cada bloco de F é lido uma vez e o arquivo D inteiro (cada um dos blocos) é lido uma vez para cada vez que é lido (nb – 2) blocos de F: - Número total de blocos acessados para o arquivo de loop externo F: bf = 2000 - Número de vezes que os blocos do arquivo F são carregados para a memória: bf/(nb – 2) = 400 - Número total de blocos acessados para o arquivo D: 10 * 400 = 4000 - Número total de acessos: 2000 + 4000 = 6000. Usando a relação D no loop externo (cada bloco de D é lido uma vez e o arquivo F inteiro é lido uma vez para cada nb – 2 blocos de D: - Número total de blocos acessados para o arquivo de loop externo D: bd = 10 - Número de vezes que os blocos do arquivo D são carregados para a memória: bd/(nb – 2) = 2 - Número total de blocos acessados para o arquivo F: 2000 * 2 = 4000 - Número total de acessos: 10 + 4000 = 4010. Considere as seguintes junções de duas vias: a) Unidade_Biblioteca ⊗ Livro_Copias b) Livro_Copias ⊗ Livro c) Livro_Emprestimos ⊗ Unidade_Biblioteca d) Livro_Emprestimos ⊗ Usuario Com as informações adicionais mostradas a seguir, calcule o número total de acessos para a implementação das operações de junção através de loop aninhado, como mostrado no exemplo acima. - Número de buffers disponíveis na memória: nb = 11 (do mesmo tamanho de um bloco de disco). - A relação Livro (L) possui rl = 30000 registros armazenados em bl = 10000 blocos de disco. - A relação Livro_Autor (LA) possui rla = 3000 registros armazenados em bla = 1000 blocos de disco. - A relação Editora (E) possui re = 200 registros armazenados em be = 40 blocos de disco. - A relação Livro_Copias (LC) possui rlc = 50000 registros armazenados em blc = 15000 blocos de disco. - A relação Livro_Emprestimos (LE) possui rle = 24000 registros armazenados em ble = 8000 blocos de disco. - A relação Unidade_Biblioteca (UB) possui rub = 50 registros armazenados em bub = 10 blocos de disco. - A relação Usuario (U) possui ru = 18000 registros armazenados em bu = 6000 blocos de disco. Exercício 3 Implementação de junção por único loop Exemplo a ser considerado (OP7 vista em sala): Departamento ⊗ Cpf_ger = Cpf Funcionario A) Primeira opção de implementação – recuperar cada registro de Funcionario e usar índice em Cpf_ger de Departamento (xcpf_ger representa o número de níveis de índice, considerando um índice secundário multiníveis sobre o atributo; aqui xcpf_ger = 2). Número de acessos a bloco: bf + (rf * (xcpf_ger + 1)) = 2000 + (6000 * 3) = 20000 acessos B) Segunda opção de implementação – recuperar cada registro de Departamento e usar índice em Cpf de Funcionário (xcpf representa o número de níveis de índice, considerando um índice secundário multiníveis sobre o atributo; aqui xcpf = 4). Número de acessos a bloco: bd + (rd * (xcpf + 1)) = 10 + (50 * 5) = 260 acessos Considere as junções apresentadas a seguir, com os valores de x para cada atributo considerado. Ainda, considere os dados do Exercício 2. Calcule o número total de acessos para a implementação das operações de junção através de único loop, como mostrado no exemplo acima. a) Unidade_Biblioteca ⊗ Livro_Copias xcod_unidade = 1; xcod_unidade = 12 b) Livro_Copias ⊗ Livro xcod_livro = 8; xcod_livro = 5 c) Livro_Emprestimos ⊗ Unidade_Biblioteca xcod_unidade = 4; xcod_unidade = 1 d) Livro_Emprestimos ⊗ Usuario xnr_cartao = 4; xnr_cartao = 4
Compartilhar