2010/1/4 Mozart Hasse <[email protected]>:
>
> Bancos de dados que usam SQL assumem que a chave exportada é a chave
> primária a não ser que se explicite o contrário
Uai, e quem está preocupado com isso?
Na maioria dos casos, não faz diferença a chave primária ser natural,
seja porque não será exportada, seja porque os volumes são
irrelevantes para aquela implementação física. Nesses casos, não há o
menor problema em exportar a chave primária.
Para a minoria (geralmente) dos casos em que é necessária, em SQL, uma
chave artificial (e explicitada ao usuário), ela pode tranqüilamente
ser a primária, não faz a menor diferença que a natural seja declarada
sem ser primária.
> Expus casos em que uma chave artifical exportada tem
> vantagens sobre as chaves compostas naturais correspondentes.
Perfeito, há casos, mas são minoritários e não excluem as chaves
naturais, compostas ou não.
> Você defendeu e reafirma que "geralmente chave artificial é desnecessária".
> Não me culpe
> por não adivinhar que está se referindo à exceção usando termos como
> "geralmente".
Pelo contrário, a exceção é precisar de chave artificial. Talvez
prestemos muita atenção nas exceções em termos de quantidade de
tabelas, porque as exceções acabam representando o maior volume de
dados.
Aliás, não o culpo de nada… só me surpreendo de como não consigo me
fazer entender.
> Nunca falei em *sempre* usar chaves artificiais. Novamente se o seu problema
> é inclusão desnecessária de campos numa tabela, critique o mau hábito,
> não o uso de chaves artificiais, que não tem nada a ver com isso.
Como não tem, se uma chave artificial é um atributo a mais? E se é
freqüentemente abusado?
> 1. Tamanho dos índices que incluem os campos da chave primária. Tamanho
> menor implica em uso mais frequente;
Sim, onde há volume que faça diferença.
> 2. Tamanho do comando SQL em consultas com várias junções, facilitando a
> vida do compilador e do otimizador;
Irrelevante… tokenizado.
> 3. Melhor estimativa de quantos registros cada condição irá retornar,
> melhorando o desempenho.
Estou para ver alguma diferença prática. Muito me surpreenderia se
houvesse alguma nas tabelas menores, que são a maioria.
>> > Se quer ler e entender o modelo, use a representação conceitual (modelo
>> > lógico).
>
>> Que, normalmente, não é mantido e, quando é, geralmente é apenas uma
>> reversa do físico, ocultando mais do que explicando.
>
> Novamente: se o seu problema é má documentação, critique o mau hábito,
> não as chaves artificias, que não tem nada a ver com isso.
Na verdade, a questão aí nem é documentação em si… é o próprio SQL que
não suporta a divisão entre conceitual e físico, e o ferramental em
torno não ajuda tanto quanto deveria.
> Lendo o que está escrito, não achei o que a "maioria" está fazendo de
> errado
Chaves artificiais à exclusão das naturais, essencialmente. E além
delas, em muitos casos.
Perdão por não me explicar mais clara e precisamente.
> nem seus critérios para medir quem é maioria e quem é minoria.
Só a minha experiência, e a de muitos colegas.
>> Falando sério, é só ver a inconsistência dos nomes de atributos?
>
> Brincou com a pergunta que mais deveria ser levada a sério. :-/
Pelo contrário.
> Não podemos esquecer que os sistemas servem para resolver *problemas*, não
> para gerar diagramas conceitualmente "perfeitos".
E qual problema exige os nomes inconsistentes dos atributos nas
relações do dicionário de dados do Oracle?
> Agora, não tente me convencer de que a "maioria" não coloca
> desempenho na lista de prioridades.
Nem tentarei. Coloca, mas equivocadamente. Não faz sequer um teste
para verificar se as regrinhas que aprendeu de ouvido se aplicam a seu
caso.
> Não, não concordaria.
Não estivesses tão quente com a polêmica… ;-)
Gostaria de escrever a respeito, também. O número talvez seja
absurdo, mas o fato de que há imensos desperdícios não é.
> De novo usando como regra geral ("geralmente") o oposto ao praticado por
> vários bancos de dados, que oferecem a opção de escolher o nível de
> isolamento exatamente
> por causa do desempenho.
Não oposto, criastes um espantalho.
A opção existir não significa que se aplica tão geralmente.
Aliás, geralmente o valor por omissão é um nível de isolamento abaixo
do serializável. O que é ótimo para prototipar um aplicativo ou para
dados isolados, mas nem tanto para sistemas maiores. Suspeito de que
a razão seja fazer bonito em testes de desempenho e evitar afugentar
programadores, mas gostaria de saber a razão exata.
> Se ganho de desempenho pelo nível de isolamento não fosse relevante,
> não seria uma opção mantida em tanto bancos de dados diferentes, incluindo
> o Postges.
Relevante, sim, mas em que casos?
Na minha experiência, e de vários colegas, o uso de níveis de
isolamento inferior ao serializável dá um ganho geralmente
insignificante, mas gera perdas significativas ao acabar levanto
desenvolvedores a colocarem conferências de
>> Claro? mas qual a proporção de tabelas que têm filhas, e que são
>> menores que as filhas, e cujas filhas são de tamanhos significativos?
>
> Por amostragem no meu caso vai de 30 a 70%.
Isso seria meio absurdo. Como 70% das tabelas terão filhas de
tamanhos significativos, e maiores que o de suas mães? Talvez nalguns
casos, mas proporcionalmente me supreenderia se fossem muitos casos.
> Se desempenho for requisito, basta
> *uma* para te obrigar a alterar o modelo para ter uma aplicação viável do
> ponto de vista do cliente.
Altere, mas não estrague o resto do modelo.
>> Non sequitur.
>
> Já que não "concorda" com a teoria (ou não entendeu minha explicação),
> sugiro que verifique o resultado na prática.
Quinze anos verificando… o argumento certamente é falacioso, como apontei.
> Se o problema é esse, critique a cultura de má modelagem, de preferência
> sendo específico, e não o uso das chaves seriais, que não tem nada a ver com
> isso.
Claro que tem! A má modelagem se traduz no abuso das chaves artificiais.
>> Para bom entendedor? fica claro que o que exijo é chave natural,
>> independente de ser primária ou alternativa, e que prefiro que não
>> haja artificial a não ser que o desempenho exija.
>
> Bom saber que pelo menos concordamos em alguma coisa.
Caramba, então ou sou muito mau explicador, ou… para bom entendedor…
tanta discussão para nada?
--
skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 3854 7191 gTalk: xmpp:[email protected]
+55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT-3 MSN: msnim:[email protected]
Sent from Sao Paulo, SP, Brésil
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral