Bases de Dados 2007/2008 Exame
|
|
|
- Eduardo Antas Castanho
- 10 Há anos
- Visualizações:
Transcrição
1 Exame 11 de Janeiro de 2007 Instituto Superior Técnico Departamento de Engenharia Informática Regras O exame tem a duração de 2h30m. A folha de capa deve ser identificada com o nome e número do aluno. Todas as restantes folhas devem ser identificadas com o número do aluno. O exame deve ser resolvido nas folhas do enunciado. O enunciado já inclui espaço para rascunho, pelo que não são permitidas folhas de rascunho. Os alunos devem ter em cima da mesa apenas o material para escrita e a sua identificação. O exame é sem consulta. Boa sorte! Número do aluno: Nome do aluno:
2 1 Considere as seguintes relações, usadas na base de dados de gestão de um condomínio fechado nos arredores de Lisboa: morador(id, nome, idade, sexo, salario) apartamento(bloco, andar, numero, tipo, renda) habita(id, bloco, andar, numero) id : F K(morador), bloco, andar, numero : F K(apartamento) usou(id, servico, data) id : FK(morador) Escreva, em álgebra relacional, as seguintes interrogações: (a) Quais os nomes dos moradores do bloco B que usaram o serviço de sauna no dia 1/1/2008? (b) Quantos apartamentos não habitados tem o bloco C? (c) Quais os apartamentos cuja soma dos salários dos seus moradores é menor do que a sua renda? (a) (b) (c) π nome (σ bloco= B servico= sauna data= 1/1/2008 (morador habita usou)) G count( ) ( σbloco= C (π bloco,andar,numero(apartamento) π bloco,andar,numero (habita)) ) σ s<renda ( bloco,andar,numerog sum(salario) as s (morador habita) apartamento ) (0,7+0,8+1,0 = 2,5 valores) Folha 2 de 19
3 2 Um restaurante italiano vende pizzas de vários tamanhos e com vários ingredientes. O cliente pode encomendar pizzas disponíveis no menu (p.ex. Tropical, Havaiana, etc.) ou pode também encomendar pizzas com ingredientes à escolha. Neste caso deve indicar, para além do tamanho da pizza, a lista de ingredientes que pretende. A figura seguinte mostra parte das tabelas relevantes da base de dados do restaurante. pizza composicao ingrediente (a) Escreva uma consulta em SQL para determinar quais as pizzas do menu que têm maior número de ingredientes. (b) Existe alguma pizza média no menu que custe tanto ou mais do que uma pizza familiar de outro tipo? Escreva uma consulta em SQL que mostre o nome dessa pizza, se existir. (c) Um cliente pretende encomendar uma pizza pequena com os seguintes ingredientes: Ananás, Atum e Cogumelos. Existe alguma pizza de menu que contenha estes ingredientes? Escreva uma consulta em SQL para responder a esta pergunta. (a) select pizza from composicao group by pizza having count(ingrediente) >= ALL(select count(ingrediente) from composicao group by pizza) (b) select a.nome from pizza as a, pizza as b where a.preco >= b.preco and a.tamanho = Média and b.tamanho = Familiar (c) select distinct(nome) from pizza Folha 3 de 19
4 where nome not in (select pizza from composicao where ingrediente not in ( Ananás, Atum, Cogumelos )) (0,7+0,8+1,0 = 2,5 valores) Folha 4 de 19
5 3 Considere novamente a base de dados da pergunta anterior. Escreva uma função que devolve a diferença de preço entre encomendar uma pizza de menu e encomendar uma pizza à escolha, com o mesmo tamanho e os mesmos ingredientes. A função recebe como parâmetros o nome e o tamanho da pizza. create function diferenca preco(nome pizza varchar(255), tamanho pizza varchar(255)) returns decimal(10,2) as begin declare preco menu decimal(10,2); declare preco escolha decimal(10,2); select preco into preco menu from pizza where tamanho = tamanho pizza and nome = nome pizza; select sum(preco) into preco escolha from ingrediente where tamanho = tamanho pizza and nome in (select ingrediente.nome from pizza, composicao, ingrediente where pizza.nome = nome pizza and pizza.tamanho = tamanho pizza and pizza.nome = composicao.pizza and composicao.ingrediente = ingrediente.nome); return preco menu - preco escolha; end (2 valores) Folha 5 de 19
6 4 Considere o seguinte universo de discurso: Os empregados da empresa ABC trabalham em diversos projectos. Cada empregado usa um conjunto de ferramentas específicas para realizar um dado projecto. É necessário contabilizar o tempo que os empregados dedicam aos projectos assim como o respectivo tempo de utilização de cada ferramenta em cada projecto. (a) Apresente um diagrama Entidade-Associação para este universo de discurso sem fazer uso dos conceitos de agregação, entidade fraca e participação total. (b) Fará sentido aplicar algum desses conceitos a este cenário? Justifique e, em caso afirmativo, apresente um novo diagrama E-A. (c) Converta o modelo da alínea (b) para um modelo relacional e especifique uma restrição de integridade não capturada. (a) Nota: falta atributo hours na relação uses... (b) Agregação: sim. Entidade fraca e participação total: não. Folha 6 de 19
7 Agregação: sim. As relações uses e work poderiam ser combinadas numa só. Contudo, isso iria diminuir a expressividade do modelo. A agregação permite criar uma entidade de nível de abstracção mais elevado que não só mantém a expressividade do modelo como elimina a redundância das duas relações supracitadas. Entidade fraca e participação total: não. Não existem entidades que dependam de entidades fortes neste universo de discurso. (c) employee(name, id) project(number) machinery(id) work(employee.id, project.number, hours) uses(machinery.id, employee.id, project.number, hours) RI: uses.hours work.hours (1,0+0,7+0,8 = 2 valores) Folha 7 de 19
8 5 Considere a relação R(A,B,C,D,E) em que se verifica o seguinte conjunto de dependências funcionais: A BC CD E B D E A (a) Indique as chaves candidatas da relação R. (b) A relação encontra-se na 3FN? Justifique. (c) Indique uma decomposição para FNBC que seja lossless-join. Justifique. (d) Indique se a decomposição apresentada na alínea anterior preserva todas as restrições de integridade. Justifique. (a) As chaves candidatas são A, E, BC e CD. (b) Como não há dependências entre os atributos não chave e como todos os atributos não chave dependem completamente das chaves candidatas, segue que a relação está na 3FN. (c) A decomposição R1 = {B,D} R2 = {A,B,C,E} é loseless-join visto que R1 R2 = {B}, que é chave de R1. (d) Esta decomposição não preserva a dependência CD E. (0,5+0,7+0,8+0,5 = 2,5 valores) Folha 8 de 19
9 6 (a) Explique o que faz o seguinte comando SQL. A ordem de especificação das colunas tem algum impacto na estrutura de indexação e/ou na pesquisa? Justifique. CREATE INDEX idx ON MyTable(x, y, z) (b) Justifique quais dos seguintes três comandos SQL poderão fazer uso do índice idx, definido acima. SELECT x, y, z FROM MyTable WHERE x=10 AND y<15 AND z>=20 SELECT x, y, z FROM MyTable WHERE x=10 AND y<15 SELECT x, y, z FROM MyTable WHERE y<15 (1) (2) (3) (c) Um índice secundário pode ser esparso? Justifique a sua resposta. (a) Criação de um índice composto, non-clustered, sobre as colunas x, y, z. Sim. A ordem das colunas determina o tipo de pesquisas que podem fazer uso do índice. Cada coluna reduz adicionalmente o espaço de pesquisa já limitado pelas colunas anteriores. Como tal, este tipo de índice só é útil em pesquisas que utilizem as primeiras n colunas exactamente pela mesma ordem que especificadas no índice. Adicionalmente, não é possível usar colunas individualmente que não a primeira. Como tal, as colunas com maior grau de discriminação devem surgir em primeiro lugar. Um exemplo de índice composto é o utilizado numa lista telefónica. Esta está ordenada por apelido, em primeiro lugar, e por nome próprio em segundo. Este tipo de índice só é útil se for conhecido o apelido. Se apenas for conhecido o nome próprio, então o índice não poderá ser utilizado, apesar deste atributo fazer parte do índice composto. (b) No comando (3) não é possível. Ver justificação acima. (c) Não. Um índice secundário não tem apontadores para todas as chaves na tabela. Como a tabela não está organizada de acordo com o índice, seria impossível encontrar chaves que este não contenha. (0,5+0,5+0,5 = 1,5 valores) Folha 9 de 19
10 7 Considere uma árvore B+ vazia, com n = 3. Desenhe a árvore passo a passo, mostrando apenas as alterações, ao inserir os seguintes valores: 5, 8, 1, 7, 3, 12, 9, 6. Folha 10 de 19
11 (2 valores) Folha 11 de 19
12 8 Considere a seguinte relação: Assuma que: R(a,b,c,d) Todos os atributos são inteiros; O atributo d e a chave primária encontram-se indexados, com índices do tipo árvore B+; A relação tem cerca de 100 registos. Escreva em álgebra relacional uma expressão que obrigue o SGBD a usar: (a) Exclusivamente um algoritmo de selecção usando índice primário (e mais nenhum outro algoritmo de selecção) (b) Exclusivamente um algoritmo selecção por pesquisa sequencial (e mais nenhum outro algoritmo de selecção), com o atributo a fazendo parte dos critérios de pesquisa. (c) Selecção com dois critérios que permita localizar directamente o registo (sem pesquisa sequencial). (a) σ a=3 (R) (b) σ a<3 (R) (c) σ a=3 d=4 (R) (0,5+0,5+0,5 = 1,5 valores) Folha 12 de 19
13 9 Considere as seguintes expressões: π loan number,customer name ( σ customer city= Lisboa amount>1000(borrower loan branch customer) ) (1) ( σ customer city= Lisboa amount>1000 π loan number,customer name (borrower loan branch customer) ) (2) referente ao seguinte modelo relacional: branch(branch name, branch city, assets), com 100 registos customer(customer name, customer street, customer city), com registos loan(loan number, branch name, amount), com registos account(account number, branch name, balance), com registos borrower(customer name,loan number), com registos depositor(customer name, account number, access date), com registos (a) As expressões (1) e (2) são equivalentes? Em caso afirmativo, justifique fazendo uso das regras de equivalência. Em caso negativo, justifique com um exemplo ou descreva a razão. (b) Indique a expressão equivalente à expressão (1) que seja o mais eficiente possível (considerando as dimensões das relações). Justifique. (c) Elabore o plano de execução (em árvore ) para a expressão (1) e para a expressão proposta na alínea anterior. (a) As expressões não são equivalentes. Basta verificar que, no caso da expressão (2), como a selecção é feita após após a projecção já não será possível verificar as condições indicadas (e.g., customer city = Lisboa ). (b) π loan number,customer name ( ( (σcustomer city= Lisboa (customer) σ amount>1000(loan)) branch ) ) borrower (c) Folha 13 de 19
14 Expressão (1) Expressão mais eficiente Folha 14 de 19
15 (0,5+1,0+0,5 = 2 valores) Folha 15 de 19
16 10 Considere a seguinte figura, onde se mostram 4 grafos (G1 a G4) do número de locks que as transacções T1 a T4 têm ao longo do tempo. Indique quais os grafos que garantem escalonamentos recuperáveis, caso haja uma falha do sistema. Explique porquê. Os escalonamentos só são recuperáveis se as transacções só libertarem os locks associados ás variáveis que alteraram aquando do commit. Assumindo que as transacções obtêm locks exclusivos antes de alterarem os dados, os escalonamentos que seguem os grafos G2, G3 e G4 são recuperáveis. (1,5 valores) Folha 16 de 19
17 Página para Rascunho Folha 17 de 19
18 Página para Rascunho Folha 18 de 19
19 Página para Rascunho Folha 19 de 19
