Índices secundários, avail list e truques para o TP3 Fábio Dias .
Transcript of Índices secundários, avail list e truques para o TP3 Fábio Dias .
Índices secundários, avail list e truques para o TP3
Fábio Diashttp://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
TP3Este 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)
DatasDom Seg Ter Qua Qui Sex Sáb8 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30 01/mai 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31 01/jun 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 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 Primária “Ponteiro” para o registro no arquivo
Beatriz 1596
Cara feia 4332
Mandei avisar 2964
Só as mães são felizes
2052
(...)
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
(...)
Qual o motivo para o índice secundário não conter o “ponteiro” para o arquivo?
Tornando EficienteChave 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
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
(...)
Gabriel o Pensador
{“Mandei avisar”,”Cara Feia”}
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
(...)
Banco
Cara Feia – Gabriel o Pensador – 4:27 – Ao vivo MTV – RapMandei avisar – Gabriel o Pensador – 4:29 – Ao vivo MTV – Rap
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árioChave 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árioChave 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 listNome 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 listNome Autor Duração Disco Gênero
Garganta Ana Carolina 4:30 Ana Carolina MPB
She Elvis Costello 3:57 Coletânea Pop
-1
Sad but true Metallica 4:23 S&M Rock
Avail: 3
Apagamos “Garganta”.
Avail listNome Autor Duração Disco Gênero
3
She Elvis Costello 3:57 Coletânea Pop
-1
Sad but true Metallica 4:23 S&M Rock
Avail: 1
Adicionamos outra música
Avail listNome Autor Duração Disco Gênero
Nua Ana Carolina 4:38 Ana Carolina MPB
She Elvis Costello 3:57 Coletânea Pop
-1
Sad but true Metallica 4:23 S&M Rock
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úsicaChave Primária
arquivo
root 4332
fabio 2964
(...)
Chave Primária
arquivo
Cara feia 4332
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áriosUsuário Música
fabio Cara nua
root Cara nua
fabio Cara feia
(...)
Música Entrada
Cara feia
1
Cara nua
3
(...)
PK Proximo
fabio 2
root -1
fabio -1
(...)
Usuário Entrada
fabio 1
root 3
(...)
PK Proximo
Cara feia
2
Cara nua
-1
Cara nua
-1
(...)
Índice secundário pelo nome da música Índice secundário pelo
login do usuário
Os índices devem ser ordenados. Não estão aqui, mas devem estar!
Sugerindo músicasUsuário Música
fabio Cara nua
root Cara nua
fabio Cara feia
(...)
Música Entrada
Cara nua
1
Cara feia
3
(...)
PK Proximo
fabio 2
root -1
fabio -1
(...)
Usuário Entrada
fabio 1
root 3
(...)
PK Proximo
Cara feia
2
Cara nua
-1
Cara nua
-1
(...)
Usuário escolhe uma música: Cara feia
Conseguimos todos os usuários que compraram aquela música
Sugerindo músicasUsuário Música
fabio Cara nua
root Cara nua
fabio Cara feia
(...)
Música Entrada
Cara nua
1
Cara feia
3
(...)
PK Proximo
fabio 2
root -1
fabio -1
(...)
Usuário Entrada
fabio 1
root 3
(...)
PK Proximo
Cara feia
2
Cara nua
-1
Cara nua
-1
(...)
Usuário escolhe uma música: Cara feia
Vamos pegar todas as músicas que estes usuários compraram
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.
?