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
