[Cascavel-pm] Dúvida em implementação de BD. Opiniões?

Luis Campos de Carvalho lechamps em terra.com.br
Terça Março 9 07:06:31 CST 2004


Francisco Lopes wrote:
> Olá Perl Monges,
> 
> Mexo com Perl há alguns anos já, leio a lista desde o início, mas não
> participo muito. Fico apenas no modo "lurker". Alguns me conhecem, aos
> outros olá. :)

   Oies!! Zuzu legal?

> O que vocês acham melhor:
> 
> a) Criar um campo na tabela onde eu armazeno os IDs dos sites a que
> esta entrada deverá estar disponível, separados por vírgulas. Exemplo:
> na tabela "conteúdo", o valor do campo "sites" seria "1,2,4,6,7" (IDs
> de sites). O contra desta solução é que não poderei selecionar de uma
> maneira fácil (e que eu conheça) apenas as entradas do site ID 2, por
> exemplo.

   Não vou nem comentar. Isto usa campos "multivalorados", coisa que a 
ANSI SQL/97 aboliu na década de 1990 (ou antes). Não parece uma solução, 
parece um pesadelo de manutenção.

> b) Criar entradas semelhantes separadas para cada site. É óbvio que o
> contra desta solução é o tamanho do banco de dados, que será bem maior
> do que o necessário.

   De acordo. Isto é impraticável.

> c) Criar uma outra tabela so para armazenar os IDs dos conteúdos que
> cada site tem. Por exemplo: na tabela "distribuicao", o valor do campo
> "ids" para site X seria "1,2,3,4,5,6,7,8,9,10" (IDs de conteúdo). O
> contra desta solução é que ainda sim não poderei fazer uma seleção
> fácil na tabela de conteúdo, e a dificuldade de adicionar/remover os
> IDs do campo.

   Desculpe, mas isto também depende de campos "multivalorados".
   Desconfio que é a mesma idéia expressa em (a), mas alocada em outra 
tabela.

> Não sei, a questão parece ser simples, acho que eu é que não estou
> conseguindo pensar "out-of-the-box". Opiniões? Aceito soluções
> diferentes das 3 mencionadas.

   Tente
   d) Criar uma tabela para relacionar website <--> conteudo, um para N. 
Desta forma, sempre que você quiser saber quais conteúdos um website 
tem, realiza uma varredura nesta tabela, e busca pelo campo "website", 
obtendo uma lista de conteúdos. Não reclame da performance, a não ser 
que você seja o IG ou o Terra, seu MySQL não vai precisar nem de tuning.
   Se, ao contrário, você desejar saber quais websites tem conteúdo X, 
basta SELECT DISTINCT( Site_ID, Content ) FROM web_x_content WHERE 
Content = 'X'.

> Desculpa logo o meu primeiro email ser tão longo... tentei me
> expressar da melhor maneira possível, e ainda sim não tenho certeza se
> fui claro o bastante. :) Ah, o banco de dados é MySQL.

   Foi mais ou menos.
   Acho que você poderia ter fornecido um trecho maior do seu modelo de 
dados existente. Isso teria facilitado bastante a minha vida, e talvez 
alguma sugestão mais interessante aparecesse... (:

   Se isso for suficiente, feliz implementação.
   Se você precisar de mais alguma coisa, por favor não fique só 
olhando! Pergunte à vontade!

   Putamplexos!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho is BSc in Comp Science,
   PerlMonk [SiteDocClan], Cascavel-pm Moderator,
   Unix Sys Admin && Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm