Índices secundários, avail list e
truques para o TP3
Fábio Dias
http://fabio.dias.googlepages.com
O que vai acontecer hoje?
•
•
•
•
•
•
TP3
Índices secundários
Melhorando nosso índice primário
Avail list
Usuário compra música
Dúvidas
TP3
Este trabalho prático é uma continuação do TP2.
Todas as definições e funcionalidades do TP2 (e TP1)
devem ser mantidas neste trabalho.
•Todas as bases de dados e formatos
•Todas as funcionalidades
•(vocês entenderam o espírito né?)
TP3 - Objetivos
• Implementação de consultas por índices
secundários
• Implementar uma política de tratamento de
registros excluídos na base de músicas,
através do conceito de avail list.
• Suporte à compra de músicas e sugestão
musical.
Implementação
• Capacidade de consulta ao banco de
dados de músicas através de:
–Palavras inteiras do do nome da
música, utilizando busca binária no
indice.
–Palavras inteiras do nome do autor.
–Palavras inteiras do nome do disco.
–Palavras inteiras do gênero.
Buscas
• Palavras inteiras. Caso contrário, a busca
binária não funcionará.
– Idéias juntando ambas serão bem vindas, mas não
cobradas.
• Deverão ser insensíveis a maiusculas /
minusculas.
Buscas - Exemplo
• Músicas no banco:
– Cara feia
– Cara nua
• Termo de busca:
– Cara ou cara ou CARA ou cArA (....)
– Todos estes devem retornar as duas músicas
– Buscas por ara ou car, não devem retornar estas
músicas
Implementação
• Implementação do tratamento dos registros
excluídos da base de músicas através do conceito
visto em sala de avail list, com os dados
armazenados no arquivo do banco de dados.
Caso a política implementada no TP2 seja
diferente, apresente vantagens e desvantagens
entre as duas. Podemos implementar a mesma
política nas duas bases de dados (música e
usuários) ?
Implementação
• Capacidade de compra de músicas. O
programa deverá armazenar quais músicas
cada usuário comprou. O método mais
adequado para isto é a criação de uma nova
base de dados, contendo a chave primária do
usuário (que identifica o usuário unicamente,
no nosso caso o login) e a chave primária de
música (o nome da música). Utilizem o nome
comprasXX.dat.
Implementação
• Deverá ser implementado também um
sistema de sugestões de compras de músicas
realizadas através de consultas aos índices
secundários. Por exemplo, quando
determinado usuário escolher uma música,
indique outras do mesmo disco/autor/gênero
ou, a opção mais completa e exata, que
sugere outras músicas compradas por quem
já comprou aquela música.
TP3
• Data de entrega:
03/05/2007
(até as 23:59)
Datas
Dom
8
15
22
29
6
13
20
27
3
10
17
24
Seg
9
16
23
30
7
14
21
28
4
11
18
25
Ter
10
17
24
01/mai
8
15
22
29
5
12
19
26
Qua
11
18
25
2
9
16
23
30
6
13
20
27
Qui
12
19
26
3
10
17
24
31
7
14
21
28
Sex
13
20
27
4
11
18
25
01/jun
8
15
22
29
Sáb
14
21
28
5
12
19
26
2
9
16
23
30
O que vai acontecer hoje?
•
•
•
•
•
•
TP3
Índices secundários
Melhorando nosso índice primário
Avail list
Usuário compra música
Dúvidas
Índices secundários
Chave
Secundária
Chave primária
Ana Carolina
Beatriz
Barão
Vermelho
Chave Primária
“Ponteiro” para o
registro no arquivo
Beatriz
1596
Só as mães são
felizes
Cara feia
4332
Gabriel o
Pensador
Cara feia
Mandei avisar
2964
2052
Gabriel o
Pensador
Mandei avisar
Só as mães são
felizes
(...)
(...)
Qual o motivo para o índice secundário não conter o “ponteiro”
para o arquivo?
Tornando Eficiente
Chave Secundária
Chave primária
Ana Carolina
Beatriz
Barão Vermelho
Só as mães são felizes
Gabriel o Pensador
Cara feia
Gabriel o Pensador
Mandei avisar
(...)
Tornando Eficiente
Chave
Secundária
Entrada
Ana Carolina
4
Barão
Vermelho
1
Gabriel o
Pensador
2
Chave primária
próximo
Só as mães são
felizes
-1
Mandei avisar
3
Cara Feia
-1
Beatriz
-1
(...)
(...)
Busca
Gabriel o Pensador
Chave
Secundária
Entrada
Ana Carolina
4
Barão
Vermelho
1
Gabriel o
Pensador
2
(...)
{“Mandei avisar”,”Cara Feia”}
Chave primária
próximo
Só as mães são
felizes
-1
Mandei avisar
3
Cara Feia
-1
Beatriz
-1
(...)
Busca
{“Mandei avisar”,”Cara Feia”}
Chave
Primária
“Ponteiro”
Beatriz
1596
Cara feia
4332
Mandei avisar
2964
Só as mães
são felizes
2052
(...)
Cara Feia
– Gabriel o Pensador – 4:27 – Ao vivo MTV – Rap
Mandei avisar – Gabriel o Pensador – 4:29 – Ao vivo MTV – Rap
Banco
O que vai acontecer hoje?
•
•
•
•
•
•
TP3
Índices secundários
Melhorando nosso índice primário
Avail list
Usuário compra música
Dúvidas
Melhorando nosso indice primário
Chave
Primária
Entrada
Cara feia
4332
Cara nua
2964
Chave primária
próximo
Cara feia
2
Cara nua
-1
Cara feia
-1
Cara nua
-1
(...)
Chave
Secundária
Entrada
Cara
1
Feia
3
Nua
4
(...)
(...)
Estamos substituindo o índice primário?
Melhorando nosso indice primário
Chave
Primária
arquivo
Cara feia
4332
Cara nua
2964
Chave primária
próximo
Cara feia
2
Cara nua
-1
Cara feia
-1
Cara nua
-1
(...)
Chave
Secundária
Entrada
Cara
1
Feia
3
Nua
4
(...)
(...)
O que vai acontecer hoje?
•
•
•
•
•
•
TP3
Índices secundários
Melhorando nosso índice primário
Avail list
Usuário compra música
Dúvidas
Avail list
Nome
Autor
Duração
Disco
Gênero
Garganta
Ana Carolina
4:30
Ana Carolina
MPB
She
Elvis Costello
3:57
Coletânea
Pop
Help
Beatles
3:43
Help
Rock
Sad but true
Metallica
4:23
S&M
Rock
Apagamos “Help”.
Avail: -1
Avail list
Nome
Autor
Duração
Disco
Gênero
Garganta
Ana Carolina
4:30
Ana Carolina
MPB
She
Elvis Costello
3:57
Coletânea
Pop
Sad but true
Metallica
4:23
S&M
Rock
-1
Apagamos “Garganta”.
Avail: 3
Avail list
Nome
Autor
Duração
Disco
Gênero
She
Elvis Costello
3:57
Coletânea
Pop
Sad but true
Metallica
4:23
S&M
Rock
3
-1
Adicionamos outra música
Avail: 1
Avail list
Nome
Autor
Duração
Disco
Gênero
Nua
Ana Carolina
4:38
Ana Carolina
MPB
She
Elvis Costello
3:57
Coletânea
Pop
Sad but true
Metallica
4:23
S&M
Rock
-1
Avail: 3
O que vai acontecer hoje?
•
•
•
•
•
•
TP3
Índices secundários
Melhorando nosso índice primário
Avail list
Usuário compra música
Dúvidas
Usuário compra música
Chave
Primária
arquivo
Chave
Primária
arquivo
root
4332
Cara feia
4332
fabio
2964
Cara nua
2964
(...)
(...)
Usuário
Música
fabio
Cara nua
root
Cara nua
fabio
Cara feia
(...)
Qual a chave
primária desse
novo banco?
Índices secundários
Índice secundário pelo
nome da música
Usuário
Música
fabio
Cara nua
root
Cara nua
fabio
Cara feia
Índice secundário pelo
login do usuário
(...)
Música Entrada
Cara
feia
Cara
nua
(...)
1
3
PK
Proximo
fabio 2
root
-1
fabio -1
Usuário Entrada
fabio
1
root
3
(...)
(...)
Os índices devem ser ordenados. Não estão aqui, mas devem estar!
PK
Proximo
Cara
feia
2
Cara
nua
-1
Cara
nua
-1
(...)
Sugerindo músicas
Usuário escolhe uma
música: Cara feia
Usuário
Música
fabio
Cara nua
root
Cara nua
fabio
Cara feia
(...)
Música Entrada
Cara
nua
Cara
feia
(...)
1
3
PK
Proximo
fabio 2
root
-1
fabio -1
Usuário Entrada
fabio
1
root
3
(...)
(...)
Conseguimos todos os usuários que compraram aquela música
PK
Proximo
Cara
feia
2
Cara
nua
-1
Cara
nua
-1
(...)
Sugerindo músicas
Usuário escolhe uma
música: Cara feia
Usuário
Música
fabio
Cara nua
root
Cara nua
fabio
Cara feia
(...)
Música Entrada
Cara
nua
Cara
feia
(...)
1
3
PK
Proximo
fabio
2
root
-1
fabio
-1
Usuário Entrada
fabio
1
root
3
(...)
(...)
Vamos pegar todas as músicas que estes usuários compraram
PK
Proximo
Cara
feia
2
Cara
nua
-1
Cara
nua
-1
(...)
Sugerindo músicas
Assim que o usuário escolher uma música:
1. Usando o índice secundário, consiga todos os
usuários que compraram aquela música;
2. Usando o outro índice secundário, consiga
todas as músicas que aqueles usuários
compraram;
3. Apresente ao usuário as N músicas mais
compradas por estes usuários.
Vocês também podem fazer isso assim que o usuário logar, usando as
músicas que ele já comprou como ponto inicial.
Download

Cara nua