Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Douglas Agostinho

Modelagem de Dados - Ranking de produtos [avançado]

Recommended Posts

Vou exemplificar para ficar mais fácil de entender qual é a minha dúvida.

 

Vamos imaginar que funciona da seguinte forma:

 

Atualmente eu tenho uma tabela com produtos, em uma loja virtual. Nesta tabela, existe um campo de "ranking". Neste campo está a colocação do produto no ranking geral.

 

Exemplo:

 

Produto A - Ranking 2

Produto B - Ranking 34

Produto C - Ranking 100

 

E por aí vai.

 

Através deste campo é possível, por exemplo, ordenar os produtos da loja por mais vendidos.

 

Porém como vocês fariam a modelagem de dados se quisessem fazer um ranking mais avançado?

 

Por exemplo: Um ranking de produtos mais vendidos para homens, ou mais vendidos na região sudeste, ou mais vendidos para pessoas entre 18 e 30 anos?

 

Isto é, como fazer uma ordenação de produtos com vários tipos de ranking (sem ter que colocar um campo para cada ranking na tabela)?

 

E mais complicado ainda: Como conseguir fazer ter um ranking, por exemplo, de mais vendidos para mulheres da região norte.

 

Para deixar claro: todos os dados eu já tenho. Isto é, eu consigo obter as informações de mais vendidos por sexo, região, idade, etc. Gostaria de uma opinião de uma modelagem de como fazer isso ficar acessível a pesquisas no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver, esse ranking nem precisava existir.

 

Eu faria esses relatórios pegando as informações dos produtos e cruzando-as com as infromações dos clientes atraves do uso do join (inner, left, right), usando order by (no caso dos mais vendidos), count, etc...

 

Evita-se assim criar campos e acessos desnecessários ao banco de dados, seja para inserir seja para atualizar algum campo desse tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver, esse ranking nem precisava existir.

 

Eu faria esses relatórios pegando as informações dos produtos e cruzando-as com as infromações dos clientes atraves do uso do join (inner, left, right), usando order by (no caso dos mais vendidos), count, etc...

 

Evita-se assim criar campos e acessos desnecessários ao banco de dados, seja para inserir seja para atualizar algum campo desse tipo.

 

A idéia é disponibilizar o ranking para os clientes verem.

 

Imagine se a cada requisição de página ter que fazer a query completa (com joins). Iria demorar 40 segundos para cada página vista.

 

A proposta no post é criar uma modelagem de dados onde isso é gerado uma vez por dia e guardado de uma forma inteligente, que possa ser acessada pelo cliente na loja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o Vinicius Ianni.

No máximo uma tabela já consolidada com os agrupamentos possíveis.

A carga seria feita numa hora em que o BD estivesse ocioso.

Não se trata de DW, uma tabela operacional consolidada para efeitos de performance apenas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como os colegas disseram, não será preciso criar uma tabela. Mas pode-se criar uma view com os dados que você queira mostrar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.