Em 25-05-2011 22:40, ivo nascimento escreveu:
> Não vejo como o uso das chamadas "chaves reais" vai melhorar a questão
> de junções.
>
Supondo que a chave primária é o campo nome na tabela foo e esse mesmo campo 
nome é chave estrangeira na tabela bar. Para buscarmos algo na tabela bar pelo 
campo nome *não* precisamos fazer uma junção (SELECT campoa FROM bar WHERE 
nome = 'Euler'); se utilizares chaves artificiais terá obrigatoriamente que 
fazer a junção (SELECT campoa FROM foo JOIN bar USING (id) WHERE nome = 
'Euler'). Isso pode fazer uma baita diferença em tabelas com alta 
cardinalidade e/ou um grande número de cláusulas WHERE nas quais os campos 
utilizados são as chaves primárias.

Essa discussão chave natural x artificial faz-me lembrar do Dilbert [1]. Toda 
vez que vejo um sistema com uma quantidade enorme de chaves artificiais, 
aquela frase dita pelo Dilbert fica martelando minha cabeça. A maioria desses 
sistemas fazem (ab)uso inadequado de chaves artificiais, tornando o sistema 
inutilizável em pouco tempo (fator que levou o Dilbert aquela conclusão). 
Portanto, use chaves artificiais com "responsabilidade" (criando as devidas 
restrições de unicidade naqueles campos que são a chave candidata).


[1] http://dilbert.com/strips/comic/2008-05-07/


-- 
   Euler Taveira de Oliveira - Timbira       http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a