Departamento
de
Engenharia
Informática
2009/2010
Administração
e
Optimização
de
BDs
2º
semestre
Mini‐Projecto
2
–
Entrega
a
16
de
Abril
de
2010
A
resolução
deve
ser
claramente
identificada
com
o
número
de
grupo
e
entregue
sob
a
forma
de
um
relatório
impresso,
seguindo
o
template
dado
na
página
da
cadeira.
A
entrega
electrónica
deve
incluir
o
código
Java
com
a
solução
das
perguntas
4
e
5.
1. Considere
que
numa
BD
relacional
existem
as
seguintes
três
relações:
Disciplinas (CodigoDisciplina, NomeDisciplina, NomeCampus, Creditos)
Professores (CodigoProfessor, Nome, CodigoDisciplina)
Campus (NomeCampus, Morada)
Em
cada
uma
das
relações
apresentadas,
as
chaves
primárias
são
os
atributos
CodigoDisciplina,
CodigoProfessor
e
NomeCampus,
respectivamente.
Considere
ainda
que
as
relações
têm
as
seguintes
propriedades:
• A
relação
Disciplinas
contém
120,000
tuplos.
• A
relação
Professores
contém
40,000
tuplos.
• A
relação
Campus
contém
80,000
tuplos.
• Na
relação
Disciplinas,
cada
página
pode
armazenar
um
máximo
de
60
tuplos.
• Na
relação
Professores,
cada
página
pode
armazenar
um
máximo
de
40
tuplos.
• Na
relação
Campus,
cada
página
pode
armazenar
um
máximo
de
80
tuplos.
a. Para
uma
junção
natural
entre
as
tabelas
Professores
e
Disciplinas,
estime
o
número
de
acessos
necessário
à
execução
no
pior
caso
de
cada
um
dos
seguintes
algoritmos
de
junção,
explicando
sempre
os
cálculos
necessários:
i. Merge
join,
assumindo
que
as
duas
relações
não
se
encontram
ordenadas.
ii. Hash
join,
assumindo
que
não
existem
colisões
na
função
de
hash.
iii. Block
nested‐loop
join,
com
a
relação
Disciplinas
como
a
inner
table.
b. Estime
o
tamanho
do
resultado
da
junção
natural
entre
as
três
relações
(Disciplinas
|x|
Professores
|x|
Campus)
e
apresente
uma
estratégia
eficiente
(i.e.
o
plano
de
execução
com
os
algoritmos)
para
o
seu
processamento.
Tenha
em
atenção
o
tamanho
das
relações
e
indique
o
custo
em
termos
de
operações
de
I/O.
Poderá
assumir
a
existência
de
índices
sobre
qualquer
uma
das
3
relações.
2. Considere
a
seguinte
interrogação
sobre
o
esquema
relacional
da
primeira
pergunta:
SELECT P.Nome, D.NomeDisciplina, C.NomeCampus
FROM
Professores P, Discilinas D, Campus C
WHERE D.CodigoDisciplina=P.CodigoDisciplina AND
D.NomeCampus=C.NomeCampus AND
C.NomeCampus=”Alameda” AND D.Creditos>30;
IST/DEI
Pág.
1
de
2
Administração
e
Optimização
de
Bases
de
Dados
Considere
um
optimizador
de
interrogações
semelhante
ao
apresentado
nas
aulas
teóricas.
Assuma
que
a
selectividade
do
predicado
NomeCampus=”Alameda” é
de
um
único
tuplo,
e
que
a
selectividade
do
predicado Creditos>30 corresponde
a
50%
da
relação
Disciplinas.
Com
a
informação
disponível,
e
assumindo
a
existência
de
índices
sempre
que
isso
seja
vantajoso,
indique
um
possível
plano
de
execução
eficiente
para
a
interrogação,
e
indique
os
algoritmos
escolhidos
a
cada
passo.
Justifique
a
sua
escolha
dos
algoritmos
com
os
cálculos
necessários.
3. Considere
as
seguinte
interrogações
sobre
o
esquema
relacional
da
primeira
pergunta:
a. π(CodigoProfessor,Nome)(σCodigoProfessor=10,000
(Professores))
b. σCodigoProfessor>30,000
∧
CodigoProfessor<30,100
(Professores)
c. σ¬(CodigoProfessor=20,000)
(Professores)
d. π(CodigoProfessor,Nome)(σCodigoEmpregado>30,000
(Professores))
e. σ¬(CodigoProfessor<10,000)(Professores)
f. σ¬(CodigoProfessor<40,000)(Professores)
Para
cada
uma
das
interrogações,
indique
qual
o
plano
de
execução
mais
eficiente,
justificando
a
resposta
com
os
cálculos
necessários.
Considere
que
o
atributo
CodigoProfessor
pode
tomar
valores
entre
1
e
40,000.
Considere
ainda
que
existe
um
índice
clustered
B+Tree
sobre
o
atributo
CodigoProfessor,
e
um
índice
non‐clustered
B+Tree
também
sobre
o
atributo
CodigoProfessor,
que
inclui
junto
com
a
chave
de
pesquisa
o
atributo
Nome.
Note
ainda
que,
nas
interrogações
que
envolvem
uma
negação,
o
optimizador
pode
substituir
as
expressões
por
outras
que
lhes
sejam
equivalentes.
4. Tomando
como
base
a
classe
JoinAlgorithmInterface.java,
implemente
o
algoritmo
merge
join.
Na
página
da
cadeira
encontra‐se
o
código
da
classe
abstracta
JoinAlgorithmInterface.java,
assim
como
uma
classe
NestedLoopJoin.java
que
exemplifica
a
sua
extensão
com
uma
implementação
do
algoritmo
nested
loop
join.
5. Tomando
como
base
a
classe
BPlusTree.java,
implemente
o
algoritmo
de
inserção
de
valores
da
estrutura
de
dados
B+Tree.
Na
página
da
cadeira
encontra‐se
o
esqueleto
da
classe
BPlusTree.java,
e
sob
esta
classe
abstracta
deverá
ser
implementado
o
método
insert.
Sugestão
de
implementação
:
Comece
por
encontrar
a
posição
onde
o
valor
deve
ser
inserido.
Verifique
se
a
inserção
envolve
o
split
do
nó
e,
em
caso
afirmativo,
verifique
se
o
mesmo
resulta
no
split
do
nó
antecessor.
Aconselha‐se
a
utilização
de
uma
estrutura
de
dados
que
armazene
a
informação
associada
ao
split.
IST/DEI
Pág.
2
de
2

Download

Enunciado