Exercício A - DI PUC-Rio

Propaganda
INF1340 - Banco de Dados II (BD2)
Prof Marcos Villas
Turma 3WA
3as e 5as 17-19hs
www.inf.puc-rio.br/~villas/bd2
[email protected]
RDC (Sala 414) E-mail: [email protected]
A) Prepare uma árvore de consulta otimizada para o comando SQL apresentado a seguir. Registre as
premissas que você utilizou para a otimização (memória de cálculo da quantidade de tuplas
acessadas por seleção). O contexto é de bandas (grupos) musicais, seus artistas, músicas, eventos e
apresentações (música apresentada por uma banda em um evento).
(B)
(A)
(P)
(M)
(E)
(X)
Banda (cod-banda, nome-banda, estilo, ano-criação, país-origem)
Artista (cod-artista, nome-artista, ano-nascimento)
Participa (cod-artista, cod-banda, ano-início, ano-término)
Música (cod-música, nome-música, ano-composição)
Evento (cod-evento, nome-evento, local-evento, data-evento)
Apresentação (cod-evento, cod-banda, cod-música)
SELECT E.nome-evento, E.data-evento
FROM X, E, B, M
WHERE X.cod-evento = E.cod-evento
AND X.cod-banda = B.cod-banda
AND X.cod-musica = M.cod-musica
AND E.local-evento = ‘Rio’
AND B.país-origem = ‘Brasil’
AND M.nome-musica LIKE ‘%praia%’;
AND B.cod-banda IN
(
SELECT P.cod-banda
FROM P, A
WHERE P.cod-artista = A.cod-artista
AND A.ano-nascimento = 1971
AND P.ano-início > 1990
)
 Nome e data do evento onde
foram apresentadas, no Rio,
músicas com ‘praia’ em seu nome
por bandas brasileiras, e que
nessas bandas havia um músico
nascido em 1971 mas que
ingressou na banda apenas após
1990.
100 bandas, 500 artistas, 1000 participações;
2.000 músicas, 200 eventos, 3.000 apresentações;
E.local-evento = Rio (20%), São Paulo (50%), Porto Alegre (5%), demais estados (25%)
B.país-origem = Brasil (90%), Argentina (5%), Chile (5%)
A.ano-nascimento = 1969 (5%), 1970 (10%), 1971 (20%), demais anos (65%)
Cardinalidade (π (B.cod-banda)) ≈ Cardinalidade (π (B.nome-banda))
Cardinalidade (π (M.cod-musica)) > Cardinalidade (π (M.nome-musica))
Chaves estrangeiras:
P.cod-artista  A.cod-artista; P.cod-banda  B.cod-banda
X.cod-evento  E.cod-evento; X.cod-banda  B.cod-banda; X.cod-musica  M.cod-musica
1/4
INF1340 - Banco de Dados II (BD2)
Prof Marcos Villas
Turma 3WA
3as e 5as 17-19hs
www.inf.puc-rio.br/~villas/bd2
[email protected]
RDC (Sala 414) E-mail: [email protected]
Tuplas acessadas por seleção
Seleção
Comparação
Tuplas
(1)
(2)
(3)
(4)
(5)
Árvore de Consulta
2/4
INF1340 - Banco de Dados II (BD2)
Prof Marcos Villas
Turma 3WA
3as e 5as 17-19hs
www.inf.puc-rio.br/~villas/bd2
[email protected]
RDC (Sala 414) E-mail: [email protected]
B) Prepare uma árvore de consulta otimizada para o comando SQL apresentado a seguir. Registre as
premissas que você utilizou para a otimização (memória de cálculo da quantidade de páginas
acessadas por seleção). O contexto é de bandas (grupos) musicais, seus artistas, músicas, eventos e
apresentações (música apresentada por uma banda em um evento).
Tabelas: [no BD uma página tem 1000 bytes]
[400
[200
[100
[100
[200
[100
bytes]
bytes]
bytes]
bytes]
bytes]
bytes]
(B)
(A)
(P)
(M)
(E)
(X)
Banda (cod-banda, nome-banda, estilo, ano-criação, país-origem)
Artista (cod-artista, nome-artista, ano-nascimento)
Participa (cod-artista, cod-banda, ano-início, ano-término)
Música (cod-música, nome-música, ano-composição)
Evento (cod-evento, nome-evento, local-evento, data-evento)
Apresentação (cod-evento, cod-banda, cod-música)
Comando SQL:
SELECT E.nome-evento, E.data-evento
FROM X, E, B, M
WHERE X.cod-evento = E.cod-evento
AND X.cod-banda = B.cod-banda
AND X.cod-musica = M.cod-musica
AND E.local-evento = ‘Rio’
AND B.país-origem = ‘Brasil’
AND M.nome-musica LIKE ‘%praia%’;
AND B.cod-banda IN
(
SELECT P.cod-banda
FROM P, A
WHERE P.cod-artista = A.cod-artista
AND A.ano-nascimento = 1971
AND P.ano-início > 1990
)
 Nome e data do evento onde
foram apresentadas, no Rio,
músicas com ‘praia’ em seu nome
por bandas brasileiras, e que
nessas bandas havia um músico
nascido em 1971 mas que
ingressou na banda apenas após
1990.
Estatísticas:
100 bandas, 500 artistas, 1000 participações;
2.000 músicas, 200 eventos, 3.000 apresentações;
E.local-evento = Rio (20%), São Paulo (50%), Porto Alegre (5%), demais estados (25%)
B.país-origem = Brasil (90%), Argentina (5%), Chile (5%)
A.ano-nascimento = 1969 (5%), 1970 (10%), 1971 (20%), demais anos (65%)
Cardinalidade (π (B.cod-banda)) ≈ Cardinalidade (π (B.nome-banda))
Cardinalidade (π (M.cod-musica)) > Cardinalidade (π (M.nome-musica))
Chaves estrangeiras:
P.cod-artista  A.cod-artista; P.cod-banda  B.cod-banda
X.cod-evento  E.cod-evento; X.cod-banda  B.cod-banda; X.cod-musica  M.cod-musica
3/4
INF1340 - Banco de Dados II (BD2)
Prof Marcos Villas
Turma 3WA
3as e 5as 17-19hs
www.inf.puc-rio.br/~villas/bd2
[email protected]
RDC (Sala 414) E-mail: [email protected]
5) Continuação: espaço para a resposta
Páginas acessadas por seleção
Seleção
Comparação
Tuplas
(1)
(2)
(3)
(4)
(5)
Árvore de Consulta
4/4
Bytes
Páginas
Download