Bases de Dados 2007/2008 Exame

Propaganda
Bases de Dados 2007/2008
Exame
25 de Janeiro de 2008
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:
Bases de Dados 2007/2008
Número:
1
Num formigueiro existem dois tipos de formigas: obreiras e guerreiras. Cada obreira pode
ter uma tarefa, como limpar o formigueiro ou procurar comida. As guerreiras têm o dever
de garantir a segurança do formigueiro e da área em volta. A área em volta do formigueiro
está dividida em regiões. Cada área é explorada por várias formigas obreiras e protegida
por uma formiga guerreira.
Considere as seguintes relações, presentes na base de dados de gestão do formigueiro:
f ormiga(nome, idade)
obreira(nome, taref a)
nome : F K(f ormiga)
guerreira(nome)
nome : F K(f ormiga)
protege(nome, regiao)
nome : F K(guerreira)
explora(nome, regiao)
nome : F K(obreira)
Escreva, em álgebra relacional, as seguintes interrogações:
(a) Quais as formigas guerreiras mais velhas do formigueiro? Responda a esta questão
sem usar operadores de agregação.
(b) Quais as formigas que exploraram todas as regiões que a formiga ’Francisca’ também
explorou?
(c) Cada formiga guerreira protege as obreiras que exploram a sua região. Em média,
cada formiga guerreira protege quantas obreiras?
Solução
(a)
X ← f¡ormiga ⊲⊳ guerreira
¢
πnome (X) − πnome σa.idade<b.idade (ρa (X) × ρb (X))
(b)
explora ÷ πregiao (σnome=′ F rancisca′ (explora))
(c)
¡
¢
X ← πprotege.nome as g,explora.nome as o¡ σprotege.regiao=explora.regiao
(protege
×
explora)
¢
Gavg(c) g Gcount(o) as c (X)
Também foi aceite:
G ← Gcount(nome) as g (guerreira)
O ← Gcount(nome) as o (obreira)
πo/g (G × O)
(2,5 valores)
Folha 2 de 17
Bases de Dados 2007/2008
Número:
2
Um leiloeiro dispõe de uma base de dados onde regista informação relevante sobre os leilões
que realiza. Essa informação inclui: a data e local do leilão, todos os lotes que foram a
leilão, bem como todas as licitações que foram feitas sobre esses lotes.
leiloes
licitacao
catalogo
(a) Escreva uma consulta em SQL que devolva a descrição do lote que foi licitado o maior
número de vezes na história deste leiloeiro.
(b) Escreva uma consulta em SQL para determinar a média do valor base de licitação de
lotes que contenham ouro.
(c) Os clientes José Trigo e Joana Silva conheceram-se num leilão. Escreva uma consulta
em SQL para determinar a data e local de todos os leilões em que ambos estiveram
presentes.
Solução
(a) select catalogo.descricao
from catalogo natural join licitacao
group by licitacao.leilao, licitacao.lote
having count(montante) >= ALL(select count(montante)
from licitacao
group by leilao, lote)
(b) select avg(valorbase)
from catalogo
where descricao like ’%ouro%’;
Folha 3 de 17
Bases de Dados 2007/2008
Número:
(c) select leilao.data, leilao.local
from leiloes natural join licitacao
and licitacao.licitante = ’José Trigo’
and licitacao.leilao in (select leilao
from licitacao
where licitante = ’Joana Silva’)
(2,5 valores)
Folha 4 de 17
Bases de Dados 2007/2008
Número:
3
Considere novamente a base de dados da pergunta anterior.
(a) Escreva uma função que devolve o valor final pelo qual foi vendido um determinado
lote em leilão. Esse valor corresponde à licitação mais elevada que foi feita sobre o
lote em causa. A função recebe como parâmetros o número do leilão e o número do
lote.
(b) Assuma que resolveu a alı́nea anterior. Recorrendo a essa função, escreva uma consulta em SQL para determinar a diferença entre o valor final e o valor base de licitação
do lote 3 do leilão 23. (Para este caso em concreto, o resultado seria: 2500.00 e 2000.00 e = 500.00 e)
Solução
(a) create function valor final(numero leilao int, numero lote int)
returns decimal(10,2)
as
begin
declare maior licitacao decimal(10,2);
select max(montante) into maior licitacao
from licitacao
where leilao = numero leilao
and lote = numero lote;
return maior licitacao;
end
(b) select valor final(23,3) - valorbase
from catalogo
where leilao = 23
and lote = 3;
(2 valores)
Folha 5 de 17
Bases de Dados 2007/2008
Número:
4
Considere os dois modelos Entidade-Associação abaixo representados.
(a) Descreva um possı́vel cenário que permita chegar ao primeiro modelo.
(b) Quais as diferenças entre o primeiro modelo e o segundo? Estes dois modelos são
equivalentes? Justifique.
(c) Se respondeu afirmativamente a (b) indique um cenário em que este tipo de transformação não seja válida. Se respondeu negativamente a (b) mostre como tornar os
modelos equivalentes.
(d) Indique vantagens e inconvenientes de usar estes dois modelos e diga por qual optaria
para comunicar a um utilizador final o cenário que descreveu em (a).
Solução
(a) Um cliente bancário tem várias contas, estando cada conta sediada numa agência
bancária especı́fica. A mesma conta pode ser partilhada por diversos clientes.
(b) A relação ternária CAB do primeiro modelo foi convertida para duas relações binárias
no segundo. Os modelos não são equivalentes porque:
• O primeiro modelo permite associar um cliente a uma conta se e só se estes
estiverem associados à respectiva agência.
• O segundo modelo permite associar um conta a uma agência ou a um cliente de
forma independente.
(c) Os modelos não são equivalentes. Existem duas formas de os tornar equivalentes:
Folha 6 de 17
Bases de Dados 2007/2008
Número:
• Através da introdução de restrições de integridade. Neste caso, a RI obrigaria
a que a associação de uma conta a um cliente implique a sua associação a uma
agência.
• Através da introdução de uma terceira relação binária e uma nova entidade
(d) Uma relação ternária tem representação mais simples mas é mais complexa de gerir no
plano lógico. A conversão para relações binárias torna o modelo menos compreensı́vel.
Contudo, simplifica o desenho lógico.
Para comunicação com um utilizador final (i.e. alguém não técnico), faz sentido usar
um modelo que transmita directamente o universo de discurso o que implica a escolha
pelo primeiro modelo.
(2,5 valores)
Folha 7 de 17
Bases de Dados 2007/2008
Número:
5
Considere a relação
R(A, B, C, D)
em que se verifica o seguinte conjunto de dependências funcionais:
AB
AB
C
D
→C
→D
→A
→B
(a) Indique todas as chaves candidatas da relação R.
(b) A relação encontra-se na 3FN? Justifique.
(c) Apresente uma decomposição para FNBC, tendo o cuidado de verificar que o conjunto
de relações daı́ resultante obedece de facto à FNBC.
(d) Indique se a decomposição apresentada na alı́nea anterior preserva todas as dependências. Justifique.
Solução
(a) As chaves candidatas são AB, BC, CD e AD.
(b) Sim. As dependências AB → C e AB → D não infringem a 3FN porque AB é chave.
As outras duas dependências C → A e D → B também não infringem a 3FN porque
tanto A como B fazem parte de uma chave candidata.
(c) A dependência C → A leva à decomposição em AC e BCD. No entanto, BCD não
está na FNBC devido à dependência D → B, daı́ que se torna necessário decompor
BCD em BD e CD. O resultado da decomposição é então: AC, BD, CD.
(d) As dependências AB → C e AB → D não são preservadas. Para as preservar seria
necessário incluir na decomposição duas relações adicionais: ABC e ABD.
(2,5 valores)
Folha 8 de 17
Bases de Dados 2007/2008
Número:
6
Considere uma tabela destinada a guardar dados sobre os funcionários de uma empresa.
A tabela contém o número de BI, o nome, e o salário de cada funcionário. Os dados estão
ordenados alfabeticamente pelo nome do funcionário. Existe um ı́ndice para a coluna de
BI e outro para a coluna de salários.
Tendo em conta a existência destes ı́ndices, explique qual seria a forma mais eficiente de
responder a cada uma das seguintes consultas:
(a) Obter o número de BI de todos os funcionários com salário igual a 1000 e.
(b) Obter o número de BI e o nome de todos os funcionários com salário superior a
1000 e.
(c) Obter o nome de todos os funcionários com número de BI antigo (isto é, com menos
de 8 dı́gitos) e salário igual a 1000 e.
Solução
(a) Pode ser usado o ı́ndice sobre a coluna de salários para responder directamente a esta
pergunta de forma eficiente.
(b) Dado que o ı́ndice sobre os salários é secundário (os dados estão ordenados por nome)
o ı́ndice não ajuda nesta questão, que envolve uma comparação. Não havendo outra
forma de o fazer, o mais eficiente é a pesquisa sequencial.
(c) O ı́ndice sobre o BI não ajuda por ser secundário. Pode ser aplicado o ı́ndice sobre
os salários e uma vez obtidos os funcionários com salário igual a 1000 e então podem
ser removidos (em memória) os registos com número de BI maior ou igual a 10 000
000.
(1,5 valores)
Folha 9 de 17
Bases de Dados 2007/2008
Número:
7
Considere a seguinte árvore B + . Desenhe a árvore passo a passo e mostrando as alterações
após inserir cada um dos seguintes valores: 8, 0 (zero) e 4.
Solução
(2 valores)
Folha 10 de 17
Bases de Dados 2007/2008
Número:
8
Considere o seguinte modelo relacional:
branch(branch name, branch city, assets),
customer(customer name, customer street, customer city),
loan(loan number, branch name, amount),
account(account number, branch name, balance),
borrower(customer name, loan number),
depositor(customer name, account number, access date),
com
com
com
com
com
com
100
100
300
500
300
500
registos
000 registos
000 registos
000 registos
000 registos
000 registos
(a) Indique que algoritmos de junção conhece.
(b) Para as seguintes expressões indique que algoritmo de junção seleccionaria e, sempre que aplicável, indique a relação sobre a qual seria criado um ı́ndice hash (em
memória). Justifique a sua resposta.
1) SELECT * FROM account NATURAL JOIN branch
2) SELECT account.balance, loan.amount
FROM account, loan
WHERE account.branch name LIKE ’P%’ AND loan.branch name LIKE ’D%’
3) SELECT loan number
FROM account, loan
WHERE balance*2 = amount
Solução
(a)
• nested-loop join
• block nested-loop join
• indexed nested-loop join
• merge-join
• hash-join
(b)
1) Hash-join. Seria criado um ı́ndice (hash) sobre a relação ”branch”pois é a de
menor dimensão.
2) Block nested-loop-join. Dado tratar-se de uma junção com conjunto de critérios
(2 critérios) este é o algoritmo adequado.
3) Merge-join dado. O hashing (seja através de um ı́ndice hash, ou de um hashjoin, ou outra operação qualquer que envolva hashing) não é uma boa solução
para este tipo de atributos onde a gama de valores é contı́nua.
(1,5 valores)
Folha 11 de 17
Bases de Dados 2007/2008
Número:
9
Considere as seguintes relações:
R1 (a, b, c, d)
R2 (x, a, z)
Assuma que:
• Todos os atributos são inteiros.
• O atributo d e a chave primária encontram-se indexados, com ı́ndices do tipo árvore B+;
(a) Represente esquematicamente o plano de execução (em árvore) para a seguinte expressão (sem qualquer optimização):
σ(a<10)∧(b>20)∧(d=50)∧(z=100) (R1 ⊲⊳ R2 )
(b) Optimize a expressão anterior, indicando a nova expressão e as regras de equivalência
usadas.
(c) Represente o novo plano de execução, indicando justificadamente os algoritmos de
junção e pesquisa seleccionados.
Solução
(a)
(b)
σa<10 (σb>20 (σd=50 (R1 )) ⊲⊳ (σz=100 (R2 )))
Folha 12 de 17
Bases de Dados 2007/2008
Número:
(c)
(1,5 valores)
Folha 13 de 17
Bases de Dados 2007/2008
Número:
10
Considere a figura seguinte, a qual representa a execução de 5 transacções num sistema que
fez o checkpoint no momento Tc , que falhou no momento Tf e que arrancou no momento
Ta .
(a) Assuma que o SGBD adopta uma polı́tica de modificação imediata (immediate database modification). Diga quais as transacções a que será feito undo e quais aquelas
a que será feito redo. Justifique.
(b) Assuma que o SGBD adopta uma polı́tica de modificação diferida (deferred database
modification). Diga quais as transacções a que será feito undo e quais aquelas a que
será feito redo. Justifique.
Solução
(a) UNDO: T4 e T5 ; REDO: T2 e T3 . No caso de modificação imediata, todos os writes
das transacções podem ter sido já escritos no disco. Portanto, terão que ser desfeitos
os writes das transacções que não chegaram ao commit. Pela mesma razão, terão
que ser refeitos os writes das transacções que chegaram ao commit.
(b) REDO: T2 e T3 ; não são feitos UNDOs. Como a escrita é diferida, os writes só são
escritos no disco após o commit da transacção. Logo, têm que ser refeitas aquelas
que chegaram ao commit, para garantir que todos os writes são efectivados. Não
é necessário fazer undo porque as alterações das transacções que não chegaram ao
commit nunca foram escritas no disco.
(1,5 valores)
Folha 14 de 17
Bases de Dados 2007/2008
Número:
Página para Rascunho
Folha 15 de 17
Bases de Dados 2007/2008
Número:
Página para Rascunho
Folha 16 de 17
Bases de Dados 2007/2008
Número:
Página para Rascunho
Folha 17 de 17
Download