Re: [pgbr-geral] Qual estrutura utilizar? (Leandro DUTRA)
Leandro, (grifos meus) Para a minoria (geralmente) dos casos em que é necessária, em SQL, uma chave artificial (*e* *e*x*p*l*i*c*i*t*a*d*a* *a*o* *u*s*u*á*r*i*o*), ela pode tranqüilamente ser a primária, não faz a menor diferença que a natural seja declarada sem ser primária. ... Ou seja, não entendi qual meu espantalho, nem o que há de errado na minha frase supracitada. A definição que eu indiquei determina que chaves artificiais não devem ser visíveis para o usuário, ao contrário do que você vem citando e que não não tem nada a ver com o que foi discutido neste tópico. Essa definição também exclui seus sistemas que se têm feito só com chaves artificiais, por causa de ORMs e coisas tais. Relevante, pois influi no número de tokens Que é irrelavante. e no número de árvores Que não é afetado. Com essa vontade toda de interpretar e entender o que você não analisou nem testou, só posso concluir que estou perdendo meu tempo. Desisto. Mozart Hasse ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar? (Leandro DUTRA) e (Mozart Hasse)
Os dois ja leram: http://it.toolbox.com/blogs/database-soup/testing-for-normalization-33119 http://it.toolbox.com/blogs/database-soup/normalization-performance-and-virtual-private-databases-32525 De Josh Berkus (CEO, PostgreSQL Experts) . Mozart Hasse wrote: Leandro, (grifos meus) Para a minoria (geralmente) dos casos em que é necessária, em SQL, uma chave artificial (*e* *e*x*p*l*i*c*i*t*a*d*a* *a*o* *u*s*u*á*r*i*o*), ela pode tranqüilamente ser a primária, não faz a menor diferença que a natural seja declarada sem ser primária. ... Ou seja, não entendi qual meu espantalho, nem o que há de errado na minha frase supracitada. A definição que eu indiquei determina que chaves artificiais não devem ser visíveis para o usuário, ao contrário do que você vem citando e que não não tem nada a ver com o que foi discutido neste tópico. Essa definição também exclui seus sistemas que se têm feito só com chaves artificiais, por causa de ORMs e coisas tais. Relevante, pois influi no número de tokens Que é irrelavante. e no número de árvores Que não é afetado. Com essa vontade toda de interpretar e entender o que você não analisou nem testou, só posso concluir que estou perdendo meu tempo. Desisto. Mozart Hasse ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- View this message in context: http://old.nabble.com/Re%3A-Qual-estrutura-utilizar--%28Leandro-DUTRA%29-tp27077210p27080784.html Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar? (Leandro DUTRA) e (Mozart Hasse)
2010/1/8 mateusgra mateus...@bol.com.br: Os dois ja leram: http://it.toolbox.com/blogs/database-soup/testing-for-normalization-33119 Sim, mas obrigado por lembrar… excelente, e CQD! ;-) http://it.toolbox.com/blogs/database-soup/normalization-performance-and-virtual-private-databases-32525 Também excelente, e também CQD. Surpreendentemente, um dos melhores comentários (sobre NULLs) é do Celko. Eu faço uma coisa um pouco diferente dos dois: olho amostras aleatórias dos dados, depois de analisar as chaves e os nomes dos objetos. Analiso primeiro as tabelas com alta proporção de NULLs. Embora o teste do Celko seja válido, de verificar que atributos /aceitam/ NULL, freqüentemente todos os atributos que não sejam parte da chave primária aceitam NULL e, numa emergência como sói acontecer, vale a pena achar as relações mais mal normalizadas através da ocorrência de NULLs na relação em si, não apenas na relvar. Muitos NULLs costumam indicar a mistura de n entidades numa única relação. De Josh Berkus (CEO, PostgreSQL Experts) . Graaande Berkus. Quero virar amigo e empregado dele… ;-) Aproveitando a deixa, tenho vontade (mas não pachorra) de criar a filial brasileira da SSKA http://www.pgexperts.com/document.html?id=24. Desculpai-me se pareço recorrer ao argumento (falacioso) da autoridade, mas realmente concordo quase integralmente com o Berkus, realmente ele é uma das coisas mais próximas que temos a uma autoridade em assuntos conceituais na comunidade PostgreSQL… e estou cansado de debater. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Alexsander Rosa alexsander.r...@gmail.com: Isso me lembra aquela velha discussão sobre usar CPF/CNPJ como chave natural, o que é impossível porque inúmeros órgãos públicos compartilham o mesmo CNPJ. Há vários motivos pelos quais CNPF ou CNPJ podem não ser chave natural — a questão que se coloca é, justamente, de qual entidade? Acho que eu mesmo já citei o caso de correntista de banco. Há, por exemplo, mulheres casadas que não têm CNPF, porque nunca tiveram vida economicamente ativa, mas têm conta conjunta com o marido. São correntistas sem CNPF. No teu caso, já poderíamos pensar numa entidade órgão público, que certamente tem outra chave. Talvez, várias entidades. Se é prático ou não separá-los numa base de dados, vai depender de muitas variáveis, como dialeto SQL, implementação física, volume de dados, tráfego de transações, ferramental de programação… mas, se não analisarmos as entidades — e para isso chaves naturais são indispensáveis, mesmo que acabem não sendo implementadas nalgum caso extremo —, nunca entenderemos os problemas. Aqui no RS, por exemplo, simplesmente TODAS as escolas estaduais usam o CNPJ da Secretaria da Educação, não apenas a raiz, o CNPJ inteiro. Para o pagamento de empenhos os nomes das escolas precisam estar corretos até a última vírgula, não dá pra emitir a NF em nome da Secretaria e depois mandar entregar na escola. No mínimo, há uma entidade escola estadual cuja chave não é o CNPJ. Talvez o nome da escola, por exemplo (sei, sei, nome dificilmente é boa chave, só para provocar a pensar), ou até o nome e o endereço. É muito mais simples usar um SERIAL para código de cliente do que tentar achar uma chave natural viável. Sim, mas incorreto. Sendo mais preciso, pode ser necessária uma chave artificial; mas não tentar uma chave natural, mesmo que não seja declarada como a primária, seria convidar problemas pela porta da frente. Sou totalmente a favor de chaves naturais, uso sempre que possível, mas há casos em que simplesmente não dá. Não dá o quê? Não dá para usar como chave primária, não estou preocupado. Não dá para declarar, estou para ver um caso. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Mozart Hasse mozart.ha...@usa.net: 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
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Andre Fernandes fernandes.an...@gmail.com: Isso não significa que a chave artificial precise estar desprovida de significado. André, pelo contrário, uma chave artificial _por definição_ é desprovida de significado. Por definição, chave natural é dada pela natureza do que se quer modelar, enquanto a artificial é criada na própria base, sem ter relação com o mundo real. Por exemplo, o CNPJ é uma chave artificial para o sistema que a gera; para todo mundo fora da Receita, é natural. E deve ser natural para todos os sistemas da Receita além daquele que o gera. Uma chave primária tem de ser a forma de buscar na tabela usada primariamente e que identifica o registro. Não exatamente. Pode haver várias formas de buscar, muitas podem nem ser chaves, nem sequer indexadas. E uma tupla pode ser identificada por n chaves, sem que uma seja mais correta, melhor ou mais importante que as outras. A necessidade duma chave entre outras ser escolhida como primária não tem mais sentido. Foi herdada pelo SQL de modelos pré-relacionais. Isso significa que criar uma chave artificial numa tabela de pedidos pode ter um sentido, é a identificação de qual o pedido do cliente e quando o mesmo ligar, será solicitada essa chave (número do pedido) para achar o mesmo. Ou seja, já virou uma chave natural, ao menos para o cliente. Veja de outra maneira: imagine que o cliente perdeu o número do pedido. O que se faz, perde-se o pedido? Não, há outras informações, que o cliente talvez nem precise decorar ou anotar, que identificarão o pedido. Cada conjunto de informações que sirva para isso será uma chave. Antes que mencionem que podemos ter alguma alteração em chaves primárias naturais (mudanças de regras de negócio, por exemplo), essa não seria uma boa justificativa para não usá-las visto a teoria Relacional não proibir alterações de chaves primárias. O argumento é prático, não conceitual. E cai com a possibilidade de ON UPDATE CASCADE. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Alexsander Rosa alexsander.r...@gmail.com: Então devo fazer uma chave composta com CNPJ+INEP e deixar NULL no campo codigo_inep em 99% dos registros? Não, você terá duas entidades diferentes: empresas de um lado, escolas do outro, no exemplo. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Leandro, 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. E ainda diz que sou em que crio espantalhos. Estou falando disso aqui: http://en.wikipedia.org/wiki/Surrogate_key Usando a definição mais moderna da minoria que ouviu falar do Wieringa e De Jonge (última moda, 1991) Como não tem, se uma chave artificial é um atributo a mais? E se é freqüentemente abusado? Já expliquei por que esse atributo a mais melhora o desempenho e a estrutura da aplicação, consulte o histórico. Recomendo que poste suas lamentações sobre os abusos que só você sabe e viu onde aconteceram na lista pertinente, que até onde eu saiba não é esta. 2. Tamanho do comando SQL em consultas com várias junções, facilitando a vida do compilador e do otimizador; Irrelevante? tokenizado. Relevante, pois influi no número de tokens e no número de árvores que o otimizador precisa analisar para escolher o plano de execução. 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. Pode ser uma senhora diferença quando juntar tabelas menores (menos de 1 registros) com tabelas maiores e o otimizador decidir usar o índice ao invés de percorrer todos os registros da pequena tabela filha. No meu planeta a gente precisa disso com frequência. Siga meu conselho e experimente, especialmente num projeto com volume de dados em que desempenho seja um dos requisitos e o hardware não seja ilimitado para esconder más decisões de modelagem. 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. Novamente: se o seu problema é o ferramental que não ajuda a documentar, critique-o na lista apropriada. Poupe as chaves artificias, que não tem nada a ver com isso. 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? Se eles te parecem inconsistentes, consulte os especialistas da área (ORACLE) na lista pertinente ou pergunte pro Tom (asktom.oracle.com). Claro que tem! A má modelagem se traduz no abuso das chaves artificiais. Só falta saber identificar quando ocorre o abuso, justificar por quê te parece um abuso e citá-lo no momento e local apropriados. Pelo contrário, a exceção é precisar de chave artificial. (...) Só a minha experiência, e a de muitos colegas. (...) Coloca, mas equivocadamente. Não faz sequer um teste para verificar se as regrinhas que aprendeu de ouvido se aplicam a seu caso. (...) A opção existir não significa que se aplica tão geralmente. (...) Relevante, sim, mas em que casos? (...) o uso de níveis de isolamento inferior ao serializável dá um ganho geralmente insignificante, mas gera perdas significativas ... (...) Isso seria meio absurdo. Como 70% das tabelas terão filhas de tamanhos significativos, e maiores que o de suas mães? (...) Altere, mas não estrague o resto do modelo. (depois de muitas caras de espanto com cada trecho) Depende da aplicação. Pelo visto nos últimos 15 anos vivemos em mundos distintos, com colegas distintos e requisitos mais distintos ainda. Mozart Hasse ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Desculpem duas respostas, mas não dava para deixar passar: 2010/1/4 Andre Fernandes fernandes.an...@gmail.com: PS: a teoria relacional não trata de chaves artificiais ou naturais, não especifica nenhuma delas, trata de normalizações e relações entre conjuntos. Não, normalização não é parte do modelo relacional. É uma conseqüência dele. E o modelo não trata de relações entre conjuntos: as relações *são* os conjuntos com os quais o modelo lida. A idéia de relacionamento vem não do modelo relacional, mas dos diagramas entidade-relacionamento. Aliás, nem trata de banco de dados, banco de dados apenas usam a mesma, mas não são as únicas coisas que usam essa teoria matemática. Pelo contrário, estou aqui com o livro do Codd, _The Relational Model for Database Management: Version 2_. Não existe outro modelo relacional, nem aplicação fora de bases de dados. Aliás, a teoria não é somente matemática: fundamenta-se na lógica dos predicados /e/ na teoria dos conjuntos. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Eduardo Andrade Bahiense edua...@escolavianet.com.br: Exceto que algumas escolas públicas compartilham este código com outras por serem, fisicamente independentes, mas, formalmente, partes de uma outra escola. Ou seja, o endereço é parte de uma chave natural. algumas informações como códigos de pessoas, alunos, escolas, clintes, entre outros, atribuídos de forma serial, já faziam parte das rotinas de instituições antes de alguém pensar em energia elétrica, e que, por regra de negócio, são chaves naturais e não artificiais Perfeito. os sistemas devem continuar gerando esses números para satisfazer requisitos do próprio negócio. Então, não dá para ir contra a própria ordem natural das coisas. O que concordo em grau, gênero e número é que muitos usam chaves artificiais como uma regra absoluta, alegando, em análise reversa, que o fazem por questão de performance, quando deveriam elaborar melhor o modelo e se valer das chaves naturais, sempre que, pelo menos, não fosse tão penoso utilizá-las. Como você mesmo mencionou, são chaves naturais. Não há problema nenhum com elas. A menos que se descubra que alguma é inútil, como creio ser o caso do RG, mas aí o negócio é político. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Comentários no texto. 2010/1/7 Leandro DUTRA leandro.gfc.du...@gmail.com 2010/1/4 Alexsander Rosa alexsander.r...@gmail.com: Isso me lembra aquela velha discussão sobre usar CPF/CNPJ como chave natural, o que é impossível porque inúmeros órgãos públicos compartilham o mesmo CNPJ. Há vários motivos pelos quais CNPF ou CNPJ podem não ser chave natural — a questão que se coloca é, justamente, de qual entidade? A entidade cliente, por exemplo. Ou quem sabe, fornecedor. Talvez exista uma entidade pessoa que contém apenas os dados básicos (nome, cpf/cnpj, etc) e as demais, como cliente, fornecedor, funcionário, etc sejam especializações. De qualquer forma, não é prático usar, digamos, o nome completo (+ nome da mãe para o caso dos homônimos): imagine um setor da empresa conversando com outro, por telefone, sobre um cliente específico. Além do tempo perdido ditando nomes potencialmente extensos, podem haver clientes homônimos ou mesmo com grafia ou sonoridade similar. Um código numérico faz muito mais sentido. Acho que eu mesmo já citei o caso de correntista de banco. Há, por exemplo, mulheres casadas que não têm CNPF, porque nunca tiveram vida economicamente ativa, mas têm conta conjunta com o marido. São correntistas sem CNPF. No teu caso, já poderíamos pensar numa entidade órgão público, que certamente tem outra chave. Talvez, várias entidades. Se é prático ou não separá-los numa base de dados, vai depender de muitas variáveis, como dialeto SQL, implementação física, volume de dados, tráfego de transações, ferramental de programação… mas, se não analisarmos as entidades — e para isso chaves naturais são indispensáveis, mesmo que acabem não sendo implementadas nalgum caso extremo —, nunca entenderemos os problemas. Tradicionalmente as empresas criam um código de cliente para cada cliente mas permitem que eles cheguem no balcão munidos apenas com o CPF e localizem seu registro. A chave natural não deixa de existir, apenas não é primária. Aqui no RS, por exemplo, simplesmente TODAS as escolas estaduais usam o CNPJ da Secretaria da Educação, não apenas a raiz, o CNPJ inteiro. Para o pagamento de empenhos os nomes das escolas precisam estar corretos até a última vírgula, não dá pra emitir a NF em nome da Secretaria e depois mandar entregar na escola. No mínimo, há uma entidade escola estadual cuja chave não é o CNPJ. Talvez o nome da escola, por exemplo (sei, sei, nome dificilmente é boa chave, só para provocar a pensar), ou até o nome e o endereço. Indo por este caminho acabaríamos criando entidades para escolas (cuja chave primária pode ser o código INEP, como foi dito aqui), agências dos correios (cada agência tem seu número), agências de alguns bancos públicos (nº do banco + nº da agência), sedes do SESC (deve haver algum código que eles usam) e assim por diante. É muito mais simples usar um SERIAL para código de cliente do que tentar achar uma chave natural viável. Sim, mas incorreto. Sendo mais preciso, pode ser necessária uma chave artificial; mas não tentar uma chave natural, mesmo que não seja declarada como a primária, seria convidar problemas pela porta da frente. Mas este é o processo: tentar em primeiro lugar uma chave natural como chave primária. Mantenho o uso de chaves artificiais dentro do mínimo necessário. Outro exemplo é o de código de produto: há quem use código de barras como chave primária, mas nem todo produto tem código de barras. Alguns são tão pequenos que é impossível sequer colocar uma etiqueta ou similar, e outros ainda são adquiridos do mesmo fornecedor com códigos de barras diferentes, por motivos que vão desde erro de impressão da embalagem até origens diferentes. Sou totalmente a favor de chaves naturais, uso sempre que possível, mas há casos em que simplesmente não dá. Não dá o quê? Não dá para usar como chave primária, não estou preocupado. Não dá para declarar, estou para ver um caso. Eu me refiro a usar como chave primária. -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/7 Mozart Hasse mozart.ha...@usa.net: 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. E ainda diz que sou em que crio espantalhos. Estou falando disso aqui: http://en.wikipedia.org/wiki/Surrogate_key Eu também. Veja que o artigo não identifica a chave primária com uma eventual chave artificial. E inclui a proposta de que o valor não deve ser manipulável, talvez nem visível, para usuários e aplicações. Ou seja, não entendi qual meu espantalho, nem o que há de errado na minha frase supracitada. Usando a definição mais moderna da minoria que ouviu falar do Wieringa e De Jonge (última moda, 1991) Que, segundo o artigo da Wikipedia supracitado, não deveria sequer aparecer para o usuário. Como não tem, se uma chave artificial é um atributo a mais? E se é freqüentemente abusado? Já expliquei por que esse atributo a mais melhora o desempenho e a estrutura da aplicação, consulte o histórico. Em alguns casos… ou seja, seu uso só se justifica nas exceções. Recomendo que poste suas lamentações sobre os abusos que só você sabe e viu onde aconteceram na lista pertinente Ah… acho que você não deve estar trabalhando com os sistemas que se têm feito só com chaves artificiais, por causa de ORMs e coisas tais. Se tiveres pachorra, pesquisa sobre Ruby on Rails, Hibernate et alli. 2. Tamanho do comando SQL em consultas com várias junções, facilitando a vida do compilador e do otimizador; Irrelevante? tokenizado. Relevante, pois influi no número de tokens Que é irrelavante. e no número de árvores Que não é afetado. que o otimizador precisa analisar para escolher o plano de execução. Que será escolhido apenas uma vez para cada consulta, portanto não é relevante para a grande maioria dos sistemas. Estou para ver alguma diferença prática. Muito me surpreenderia se houvesse alguma nas tabelas menores, que são a maioria. Pode ser uma senhora diferença quando juntar tabelas menores (menos de 1 registros) com tabelas maiores e o otimizador decidir usar o índice ao invés de percorrer todos os registros da pequena tabela filha. No meu planeta a gente precisa disso com frequência. Essa junção existe, mas é minoria. Otimização precoce é a raiz de toda sorte de males. Siga meu conselho e experimente, especialmente num projeto com volume de dados em que desempenho seja um dos requisitos e o hardware não seja ilimitado para esconder más decisões de modelagem. Precisamente minha experiência. E nesses projetos, só uma minoria das tabelas precisa de chaves artificiais. A maioria vai melhor com chaves naturais, inclusive aquelas que incluem chaves artificiais herdadas de tabelas-mãe. Novamente: se o seu problema é o ferramental que não ajuda a documentar, critique-o na lista apropriada. Poupe as chaves artificias, que não tem nada a ver com isso. Desde quando estou falando mal de chaves artificiais? Estou dizendo que são abusadas, e como. E qual problema exige os nomes inconsistentes dos atributos nas relações do dicionário de dados do Oracle? Se eles te parecem inconsistentes, consulte os especialistas da área (ORACLE) na lista pertinente ou pergunte pro Tom (asktom.oracle.com). Por acaso sou especialista na área, e perguntar ao Tom não vai torná-los mais consistentes. Isso é consenso, entre quem repara nessas coisas. Só falta saber identificar quando ocorre o abuso, justificar por quê te parece um abuso e citá-lo no momento e local apropriados. O que tentei fazer, mas pelo jeito não falo a mesma língua que tu. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/7 Alexsander Rosa alexsander.r...@gmail.com: Comentários no texto. Tranqüilo, é o padrão. 2010/1/7 Leandro DUTRA leandro.gfc.du...@gmail.com Há vários motivos pelos quais CNPF ou CNPJ podem não ser chave natural — a questão que se coloca é, justamente, de qual entidade? A entidade cliente, por exemplo. Ou quem sabe, fornecedor. Talvez exista uma entidade pessoa que contém apenas os dados básicos (nome, cpf/cnpj, etc) e as demais, como cliente, fornecedor, funcionário, etc sejam especializações. Exato — ao menos, conceitualmente, normalizando. A questão é se vale a pena implementar; mas essa só pode ser respondida para situações específicas. Genericamente, é preciso analisar as chaves (entre outras coisas) para descobrir até onde se deve normalizar, para só então decidir o que dá para implementar, entre tudo que se descobriu. De qualquer forma, não é prático usar, digamos, o nome completo (+ nome da mãe para o caso dos homônimos): imagine um setor da empresa conversando com outro, por telefone, sobre um cliente específico. Usar como? Usar como chave primária, ou como única chave, provavelmente. Já declarar como chave natural, ainda que não a primária, é necessário para evitar duplicações. Especificamente nesse exemplo, provavelmente precise-se de uma chave composta, visto que mesmo o conjunto de nome e filiação não costuma ser chave. Tradicionalmente as empresas criam um código de cliente para cada cliente mas permitem que eles cheguem no balcão munidos apenas com o CPF e localizem seu registro. A chave natural não deixa de existir, apenas não é primária. Aí está certo. Indo por este caminho acabaríamos criando entidades para escolas (cuja chave primária pode ser o código INEP, como foi dito aqui), agências dos correios (cada agência tem seu número), agências de alguns bancos públicos (nº do banco + nº da agência), sedes do SESC (deve haver algum código que eles usam) e assim por diante. Exato. O SQL não ajuda muito, mas pode ser necessário. Não necessariamente com códigos particulares, embora eles sejam atraente. Poderia ser endereço, por exemplo. Sendo mais preciso, pode ser necessária uma chave artificial; mas não tentar uma chave natural, mesmo que não seja declarada como a primária, seria convidar problemas pela porta da frente. Mas este é o processo: tentar em primeiro lugar uma chave natural como chave primária. Exato! Conversando com boa vontade, a gente se entende… Sou totalmente a favor de chaves naturais, uso sempre que possível, mas há casos em que simplesmente não dá. Não dá para usar como chave primária, não estou preocupado. Eu me refiro a usar como chave primária. Tudo certo. Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater Hm, acho que não concordo… OT! :-) -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Que bom que acabamos nos entendendo... 2010/1/7 Leandro DUTRA leandro.gfc.du...@gmail.com De qualquer forma, não é prático usar, digamos, o nome completo (+ nome da mãe para o caso dos homônimos): imagine um setor da empresa conversando com outro, por telefone, sobre um cliente específico. Usar como? Usar como chave primária, ou como única chave, provavelmente. Já declarar como chave natural, ainda que não a primária, é necessário para evitar duplicações. Especificamente nesse exemplo, provavelmente precise-se de uma chave composta, visto que mesmo o conjunto de nome e filiação não costuma ser chave. Sim, eu me referia a usar como chave primária. Agora uma curiosidade: um ex-colega de faculdade se chamava TÉLVIO e tinha um irmão gêmeo chamado TÉLCIO. O irmão fez o título de eleitor primeiro e meu colega não conseguiu tirar o título -- pelo menos até a época da formatura. O sistema do TRE achou que era fraude, pois eles tinham os nomes muito parecidos, mudando apenas uma letra, e tinham data de nascimento e nome da mãe iguais. Ele deve estar com quase 40 anos hoje; não sei se conseguiu votar algum dia. Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater Hm, acho que não concordo… OT! :-) Com o extremismo ou com a moderação? :-) -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/7 Alexsander Rosa alexsander.r...@gmail.com: Que bom que acabamos nos entendendo... Costuma acontecer… talvez não tanto quanto deveria. Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater Hm, acho que não concordo… OT! :-) Com o extremismo ou com a moderação? :-) Com o ‘não é’. Eu concordaria com ‘não necessariamente é’. :-) -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Aconselho todos a ler : http://it.toolbox.com/blogs/database-soup/testing-for-normalization-33119 http://it.toolbox.com/blogs/database-soup/normalization-performance-and-virtual-private-databases-32525 De Josh Berkus (CEO, PostgreSQL Experts) . Leandro DUTRA wrote: 2010/1/7 Alexsander Rosa alexsander.r...@gmail.com: Que bom que acabamos nos entendendo... Costuma acontecer… talvez não tanto quanto deveria. Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater Hm, acho que não concordo… OT! :-) Com o extremismo ou com a moderação? :-) Com o ‘não é’. Eu concordaria com ‘não necessariamente é’. :-) -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- View this message in context: http://old.nabble.com/Qual-estrutura-utilizar--tp26956001p27064579.html Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Pelo contrário, estou aqui com o livro do Codd, _The Relational Model for Database Management: Version 2_. Não existe outro modelo relacional, nem aplicação fora de bases de dados. Aliás, a teoria não é somente matemática: fundamenta-se na lógica dos predicados /e/ na teoria dos conjuntos. Boa tarde, Lógica de predicados e teoria dos conjuntos são parte da matemática. No restante, não discordo muito de ti, apenas devo dizer que modelo relacional tem aplicação em qualquer armazenamento, até mesmo em bibliotecas ou estoques, não somente em bancos de dados. Infelizmente não é comum vermos o uso explícito fora de bancos de dados, mas existe aplicação fora deste. A não ser que consideremos bibliotecas ou estoques de uma empresa como sendo bancos de dados (há um professor alemão que menciona muito essa forma de se tratar banco de dados, extendendo o conceito para qualquer agrupamento organizado de objetos e/ou dados - todos os objetos podem ser considerados dados). Abraços, -- André de Camargo Fernandes ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/7 Andre Fernandes fernandes.an...@gmail.com: Lógica de predicados e teoria dos conjuntos são parte da matemática. Verdade, perdão pela desinformação. No restante, não discordo muito de ti, apenas devo dizer que modelo relacional tem aplicação em qualquer armazenamento, até mesmo em bibliotecas ou estoques, não somente em bancos de dados. Uai, essa me interessou. Tem alguma referência? A não ser que consideremos bibliotecas ou estoques de uma empresa como sendo bancos de dados (há um professor alemão que menciona muito essa forma de se tratar banco de dados, extendendo o conceito para qualquer agrupamento organizado de objetos e/ou dados - todos os objetos podem ser considerados dados). De fato, qualquer coleção organizada de dados pode ser considerada uma base. O que me surpreenderia seriam objetos. ¿Tens o nome de Herr Profeßor Doktor? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brésil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/30 Mozart Hasse mozart.ha...@usa.net: Particularmente, prefiro saber quando muda uma chave. Melhor que as alterações sejam explícitas que implícitas. Quer saber quando a chave muda? Registre alterações via trigger numa tabela de histórico. Teu modelo não tem nenhuma obrigação de mudar por causa desse desejo. Hm, não me expliquei bem. Creio que a aplicação deve saber quando uma chave natural exportada mudar — ou melhor, o programador. Não é uma alteração comum, e o custo de pensar sobre ela vale a pena os benefícios. E isso pode mudar a qualquer momento quando os requisitos do seu sistema mudarem. Naturalmente — e, mais uma vez, prefiro mudanças explícitas a implícitas. Conheci sistemas que precisaram colocar até nome da mãe na chave alternativa da tabela de pessoas para evitar duplicidades. Que tal fazer isso na minha tabela de pessoas, com 47 filhas? Até mais que o nome da mãe… poderia chegar ao ponto do DNA, das digitais, da íris entrarem para a chave. A idéia da chave artificial foi justamente lidar com esse tipo de situação. Nunca foi implementada corretamente, mas mesmdo do jeito que está pode ser útil e, até, necessário. Quer embutir essa tralha toda na chave primária e em todas as chaves estrangeiras por questão de purismo conceitual? Não. Nunca falei isso. Falei que geralmente chave artificial é desnecessária; não que é sempre desnecessária. E, aliás, que o que menos me importa é qual seja a chave primária, ou qual chave será ‘exportada’ (não nesta discussão, talvez). Em TODOS os bancos de dados o tamanho do índice conta na decisão de usá-lo ou não, e uma chave serial de 2, 4 ou 8 bytes jamais será maior do que qualquer chave natural que se encontre para a mesma tabela. Portanto, usar chaves naturais para fazer FKs aumenta sim o tamanho dos índices e tem toda a chance de igualar ou piorar o desempenho. Pelo contrário, uma chave artificial (que não é chave, conceitualmente) tem de ser definida *além* das naturais, e portanto sempre será gordura. Pode ser uma gordura necessária, mas em alguns casos, não todos. Aliás, que diferença faz o tamanho da chave para a maioria das tabelas, que não tem filhas de tamanho significativo? Evitar junções desnecessárias costuma ser mais importante. 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. 3 anos é pouco pra você?! Tá bom, que tal o sistema que mantenho hoje, que tem uns 15? Melhorando! 900 tabelas tá bom pra você ou é meio pequenininho pra entrar na conta? A quantidade de tabelas parece interessante… mas você já está na polêmica pela polêmica, caro Herr Hasse. Não percebeu, ou esqueceu, que não estou impondo verdades absolutas, mas derrubando regrinhas estúpidas que são úteis nalguns casos mas prejudicam na maioria. Veja que em nenhum lugar tentei proibir chaves artificiais; só disse que elas são úteis numa minoria dos casos onde são usadas hoje. Parabéns por ter um sistema grande e longevo. Mas não use tua experiência e capacidade para desprezar a experiência e capacidade de outros. Leia o que foi escrito, não o que te irritou no passado. Parece que não estás lendo o que escrevi, mas algo que algum sabichão falou sabe-se lá quando e ficou atravessado em tua garganta. Catálogo do Oracle mal modelado? Quando apresentar algum mais normalizado que faça o mesmo que ele e ainda por cima tenha o mesmo desempenho, avise. Simples: o do PostgreSQL. Mas isso foi apenas sacanagenzinha minha… Falando sério, é só ver a inconsistência dos nomes de atributos… Isto é apenas um número sem fonte (vulgo chute) com um valor cheio de zeros. De fato não li o referido estudo, e não tenho a pachorra de buscá-lo agora. O interessante é que, para quem tem experiência na área, não parece tão absurdo quanto deveria. Creio que tu mesmo concordarias, não estivesses tão quente com a polêmica. Aliás, quero escrever um pouco a respeito, dia desses… todas as oportunidades desperdiçadas, por exemplo com programação funcional e de pilha, processadores específicos, computação hospedeiro-terminais, sistemas abertos e livres, processadores RISC, Unix e Plan9, métodos formais, sistemas relacionais… o mundo poderia ser bem melhor. Nível de isolamento serializável, e de quebra a aplicação fica mais robusta. E mais lenta, especialmente em acessos concorrentes. Nem todo mundo tem tempo, dinheiro ou motivo para esperar. Nem tão mais lenta quanto se pensa, nem todo mundo tem o gargalo aí. Geralmente, a aplicação mais robusta e melhor pensada mais do que compensaria os custos computacionais da serialização. Não, pois faço os testes de desempenho com uma única conexão a um servidor dedicado. Hm, isso não seria um teste válido para muitos casos… mas é claro que conheces tua situação melhor que qualquer um de fora. Tamanho do índice entra na conta,
Re: [pgbr-geral] Qual estrutura utilizar?
Isso me lembra aquela velha discussão sobre usar CPF/CNPJ como chave natural, o que é impossível porque inúmeros órgãos públicos compartilham o mesmo CNPJ. Aqui no RS, por exemplo, simplesmente TODAS as escolas estaduais usam o CNPJ da Secretaria da Educação, não apenas a raiz, o CNPJ inteiro. Para o pagamento de empenhos os nomes das escolas precisam estar corretos até a última vírgula, não dá pra emitir a NF em nome da Secretaria e depois mandar entregar na escola. É muito mais simples usar um SERIAL para código de cliente do que tentar achar uma chave natural viável. Sou totalmente a favor de chaves naturais, uso sempre que possível, mas há casos em que simplesmente não dá. 2010/1/4 Leandro DUTRA leandro.gfc.du...@gmail.com Não. Nunca falei isso. Falei que geralmente chave artificial é desnecessária; não que é sempre desnecessária. E, aliás, que o que menos me importa é qual seja a chave primária, ou qual chave será ‘exportada’ (não nesta discussão, talvez). (...) O problema não é a existência do SERIAL, é seu uso — e abuso. 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. -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Boa tarde, Pessoalmente, após analisar um pouco mais o assunto, sou a favor de chaves artificiais em muitas tabelas, salvo algumas poucas exceções. Isso não significa que a chave artificial precise estar desprovida de significado. Uma chave primária tem de ser a forma de buscar na tabela usada primariamente e que identifica o registro. Isso significa que criar uma chave artificial numa tabela de pedidos pode ter um sentido, é a identificação de qual o pedido do cliente e quando o mesmo ligar, será solicitada essa chave (número do pedido) para achar o mesmo. Por outro lado, se formos olhar a tabela de clientes, quando um cliente ligar, o que pediremos dele? O CPF/CNPJ, nome, etc., ou o seu número de cadastro (Id)? Nesse caso a chave artificial perde o sentido (meaningless), e precisamos avaliar se haveria razão para usá-la. Antes que mencionem que podemos ter alguma alteração em chaves primárias naturais (mudanças de regras de negócio, por exemplo), essa não seria uma boa justificativa para não usá-las visto a teoria Relacional não proibir alterações de chaves primárias. Por outro lado, no caso de um cliente, qual seria uma boa alternativa? Eu diria que o CPF/CNPJ pois é único, identifica o registro. Contudo nesse caso temos de analisar outro aspecto, tamanho ocupado. Supondo que não guardamos os dígitos nem traços, teremos um campo com tamanho 14. Na tabela de clientes temos esse registro e em todas as tabelas que possuam chave estrangeira para ela. Se usássemos um inteiro longo, teríamos na tabela de clientes adicionado 8 bytes por linha, e em todas as tabelas que possuam chave estrangeira para com ela adicionaríamos 8 bytes e tiraríamos o tamanho da string (15 bytes). Ou seja, diminuiríamos em cada linha de cada tabela 7 bytes. Colocando valores para teste, imaginemos que tenhamos 1 clientes cadastrados, 120 pedidos (incluindo cancelados), 22000 telefones cadastrados (a tabela telefone teria uma chave estrangeira para indicar qual o cliente dono do mesmo) e 12400 endereços cadastrados (a tabela de endereços teria uma chave estrangeira para indicar qual o cliente dono do mesmo). Nota: os valores são de um período de uma base na qual trabalhei (arredondados), somente não posso mencionar o nome da empresa. Voltando ao caso, temos adicionados 8*1 bytes na tabela clientes com relação a não termos essa chave artificial, e ganhamos 7 * (120+22000+12400) bytes, ou seja, neste caso o ganho de espaço (sem nem considerar as chaves em si, que também ocupam espaço em disco) seria considerável. Vários casos assim podem ter vantagem de chaves artificiais, mas precisamos tomar cuidado, isso não é lei, há exceções. Ainda não há provas concretas e irrefutáveis de que usar chaves naturais ou artificiais seja a melhor alternativa, talvez por nem ser possível isso, mas muitas vezes chaves artificiais são uma ótima adição. Recomendo que verifiquem se vale a pena o uso de chaves artificiais. Atenciosamente, André. PS: a teoria relacional não trata de chaves artificiais ou naturais, não especifica nenhuma delas, trata de normalizações e relações entre conjuntos. Aliás, nem trata de banco de dados, banco de dados apenas usam a mesma, mas não são as únicas coisas que usam essa teoria matemática. PS2: No exemplo apresentado, por quê não usas o código INEP? 2010/1/4 Alexsander Rosa alexsander.r...@gmail.com Isso me lembra aquela velha discussão sobre usar CPF/CNPJ como chave natural, o que é impossível porque inúmeros órgãos públicos compartilham o mesmo CNPJ. Aqui no RS, por exemplo, simplesmente TODAS as escolas estaduais usam o CNPJ da Secretaria da Educação, não apenas a raiz, o CNPJ inteiro. Para o pagamento de empenhos os nomes das escolas precisam estar corretos até a última vírgula, não dá pra emitir a NF em nome da Secretaria e depois mandar entregar na escola. É muito mais simples usar um SERIAL para código de cliente do que tentar achar uma chave natural viável. Sou totalmente a favor de chaves naturais, uso sempre que possível, mas há casos em que simplesmente não dá. 2010/1/4 Leandro DUTRA leandro.gfc.du...@gmail.com Não. Nunca falei isso. Falei que geralmente chave artificial é desnecessária; não que é sempre desnecessária. E, aliás, que o que menos me importa é qual seja a chave primária, ou qual chave será ‘exportada’ (não nesta discussão, talvez). (...) O problema não é a existência do SERIAL, é seu uso — e abuso. 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. -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- André
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Alexsander Rosa alexsander.r...@gmail.com: Então devo fazer uma chave composta com CNPJ+INEP e deixar NULL no campo codigo_inep em 99% dos registros? De forma alguma!!! Cada instituição obrigatoriamente deve possuir um código INEP, segundo Ministério da Educação. Portanto este código é de fato a *chave natural* de uma instituição de ensino e nao precisa de outro atributo para compor a unicidade. Escolas são apenas uma pequena parte do problema, outras secretarias em outras esferas apresentam o mesmo problema. Outros exemplos: Correios, CEEE, SESC, etc. Parece mais um caso onde a emenda é pior que o soneto. Eu imagino mesmo que deve ser só a ponta do iceberg, no entanto eu utilizei o exemplo do INEP para ressaltar a importancia da *analise* para identificar as chaves e entidades ainda na fase de modelagem. -Leo -- Leonardo Cezar http://www.aslid.org.br http://postgreslogia.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Boa tarde, Eu tinha perguntado a mesma coisa há pouco... :-) Mas também já vi a resposta, abraços, desculpa por ter mencionado a mesma coisa... Utilize o código INEP [1] ... ;-) que naturalmente deveria ser a chave de instituição educional. 1) inep.gov.br /só-pra-ser-chato -Leo -- Leonardo Cezar http://www.aslid.org.br http://postgreslogia.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- André de Camargo Fernandes ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Leonardo Cezar escreveu: 2010/1/4 Alexsander Rosa alexsander.r...@gmail.com: Então devo fazer uma chave composta com CNPJ+INEP e deixar NULL no campo codigo_inep em 99% dos registros? De forma alguma!!! Cada instituição obrigatoriamente deve possuir um código INEP, segundo Ministério da Educação. Portanto este código é de fato a *chave natural* de uma instituição de ensino e nao precisa de outro atributo para compor a unicidade. Exceto que algumas escolas públicas compartilham este código com outras por serem, fisicamente independentes, mas, formalmente, partes de uma outra escola. O que estamos esquecendo de considerar nesta discussão é que algumas informações como códigos de pessoas, alunos, escolas, clintes, entre outros, atribuídos de forma serial, já faziam parte das rotinas de instituições antes de alguém pensar em energia elétrica, e que, por regra de negócio, são chaves naturais e não artificiais, pois os sistemas devem continuar gerando esses números para satisfazer requisitos do próprio negócio. Então, não dá para ir contra a própria ordem natural das coisas. O que concordo em grau, gênero e número é que muitos usam chaves artificiais como uma regra absoluta, alegando, em análise reversa, que o fazem por questão de performance, quando deveriam elaborar melhor o modelo e se valer das chaves naturais, sempre que, pelo menos, não fosse tão penoso utilizá-las. Eduardo Escolas são apenas uma pequena parte do problema, outras secretarias em outras esferas apresentam o mesmo problema. Outros exemplos: Correios, CEEE, SESC, etc. Parece mais um caso onde a emenda é pior que o soneto. Eu imagino mesmo que deve ser só a ponta do iceberg, no entanto eu utilizei o exemplo do INEP para ressaltar a importancia da *analise* para identificar as chaves e entidades ainda na fase de modelagem. -Leo Nenhum vírus encontrado nessa mensagem recebida. Verificado por AVG - www.avgbrasil.com.br Versão: 9.0.725 / Banco de dados de vírus: 270.14.124/2598 - Data de Lançamento: 01/03/10 07:41:00 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2010/1/4 Andre Fernandes fernandes.an...@gmail.com: Boa tarde, Eu tinha perguntado a mesma coisa há pouco... :-) Mas também já vi a resposta, abraços, desculpa por ter mencionado a mesma coisa... Afe ... Boiei! -Leo -- Leonardo Cezar http://www.aslid.org.br http://postgreslogia.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Sobre o código INEP, usar o código INEP no lugar de CNPJ... Abraços, 2010/1/4 Leonardo Cezar lhce...@gmail.com 2010/1/4 Andre Fernandes fernandes.an...@gmail.com: Boa tarde, Eu tinha perguntado a mesma coisa há pouco... :-) Mas também já vi a resposta, abraços, desculpa por ter mencionado a mesma coisa... Afe ... Boiei! -Leo -- Leonardo Cezar http://www.aslid.org.br http://postgreslogia.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- André de Camargo Fernandes ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 Marcal Hokama mhok...@hotmail.com: haverá uma demanda de processamento (envolvendo CPU, memória e E/S), até por outra informação dada: porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Há muitos fatores a considerar, ainda… os algoritmos são eficientes? O momento dos cálculos é conveniente? Que outras formas de os fazer haveria? Qual o gargalo, E/S ou processador? E vai por aí afora. é bem provável que o modelo atual (transacional) nao atenderá a essa necessidade de emissão de relatórios em tempo real, sendo necessária a criação de novas estruturas para atender a essa finalidade. Uma coisa não exclui a outra. Novas estruturas não significam que o modelo atual não atende; é tudo questão de modelo físico e circunstâncias. Tudo depende do contexto em que vai ser aplicado. Existem soluções que não são adequadas para determinados casos e para outros são. CQD. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Leandro, Particularmente, prefiro saber quando muda uma chave. Melhor que as alterações sejam explícitas que implícitas. Quer saber quando a chave muda? Registre alterações via trigger numa tabela de histórico. Teu modelo não tem nenhuma obrigação de mudar por causa desse desejo. Os problemas do CNPF são outros, geralmente: gente que não tem CNPF pode até ter conta bancária, por exemplo mulheres casadas com conta conjunta com o marido. E isso pode mudar a qualquer momento quando os requisitos do seu sistema mudarem. Conheci sistemas que precisaram colocar até nome da mãe na chave alternativa da tabela de pessoas para evitar duplicidades. Que tal fazer isso na minha tabela de pessoas, com 47 filhas? Quer embutir essa tralha toda na chave primária e em todas as chaves estrangeiras por questão de purismo conceitual? Quando eu trocar o tamanho do campo vou ter de criar um script monstruoso que levará horas ao invés de 30 segundos digitando uma linha. Quando alguém digitar errado o nome do cara durante o cadastro e notar isso no mês seguinte, depois de lanças algumas dezenas de notas, devo deixar o cliente esperando a emissão de nota ficar parada porque o banco de dados precisa aplicar o cascade nas 47 filhas para o modelo não ser prejudicado? Na-na-ni-na-não. Exemplos pf, engorda a base? Pelo que entendo facilita até a maneira que o banco trabalha. Em alguns casos, já citados, sim, por limitações do SQL. Mas na maioria dos casos é um atributo e um índice a mais sem necessidade, e mais junções. Em TODOS os bancos de dados o tamanho do índice conta na decisão de usá-lo ou não, e uma chave serial de 2, 4 ou 8 bytes jamais será maior do que qualquer chave natural que se encontre para a mesma tabela. Portanto, usar chaves naturais para fazer FKs aumenta sim o tamanho dos índices e tem toda a chance de igualar ou piorar o desempenho. Obscurece o modelo? Por favor seja mais específico. Quem lê um modelo com chaves naturais entende tudo; quem lê um modelo com chaves artificiais tem de adivinhar muita coisa. Se quer ler e entender o modelo, use a representação conceitual (modelo lógico). Quando puser para funcionar, terá de lidar com o modelo *físíco*, com todas as tabelas, índices, chaves artificiais, índices, triggers, visões materializadas e qualquer outra coisa que sirva para deixar a aplicação com um desempenho decente. Eu diria que é para evitar ser amaldiçoado por todas as gerações futuras de usuários, programadores e analistas, sem falar nos DBAs. Estou pra conhecer um DBA que goste de rasgar SLAs com cláusulas de tempo de resposta mínimo e mande todo mundo parar de trabalhar para esperar o banco fazer um DELETE CASCADE numa tabela com mais de 10 registros. Estou também para conhecer um DBA que seja contratado por alguém que se dê ao luxo pagar um cara qualificado para dizer para o cliente senta e chora quando identificar deadlocks causados por purismos conceituais. Claro! Mas eu tenho o pressentimento de que, como está, teu sistema dificilmente crescerá muito, e continuará a ser mantido por ti, então nada do que falei se tornará visível. 3 anos é pouco pra você?! Tá bom, que tal o sistema que mantenho hoje, que tem uns 15? 900 tabelas tá bom pra você ou é meio pequenininho pra entrar na conta? Na verdade, mesmo os grandes ERPs têm péssimos modelos. Até o catálogo da Oracle é mal modelado. Catálogo do Oracle mal modelado? Quando apresentar algum mais normalizado que faça o mesmo que ele e ainda por cima tenha o mesmo desempenho, avise. Dá para ir tocando, mas são custos ocultos. Alguém os estimou globalmente em US$1,2T por ano. Isto é apenas um número sem fonte (vulgo chute) com um valor cheio de zeros. Chutes não vão convencer ninguém a mudar de idéia nem vão justificar qualquer abordagem que se apresente. especialmente se você quiser usar a chave para identificar alterações concorrentes sobre o mesmo registro Nível de isolamento serializável, e de quebra a aplicação fica mais robusta. E mais lenta, especialmente em acessos concorrentes. Nem todo mundo tem tempo, dinheiro ou motivo para esperar. Agora me dei conta? será que teus problemas recorrentes de desempenho não são por controle de transações na aplicação? Não, pois faço os testes de desempenho com uma única conexão a um servidor dedicado. A melhoria é grande demais para ser ignorada, pois quase todos os índices ficarão menores Ou melhor, depende. Tabela mãe pequena e pouco usada com tabelas filhas grandes, pode ser, se não forçar junções demais. Tamanho do índice entra na conta, especialmente com muitos registros tanto na tabela pai quanto na filha. Mas sempre haverá um índice a mais, tanto em disco quanto em memória, ocupando também cache e exigindo atualizações. O que só seria problema se a atividade mais frequente fosse atualizar as tabelas ao invés de consultá-las. e com distribuição estatística mais evidente (do ponto de vista do banco de dados)
Re: [pgbr-geral] Qual estrutura utilizar?
From: leandro.gfc.du...@gmail.com Date: Wed, 30 Dec 2009 07:40:50 -0200 To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Qual estrutura utilizar? 2009/12/29 Marcal Hokama : haverá uma demanda de processamento (envolvendo CPU, memória e E/S), até por outra informação dada: porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Há muitos fatores a considerar, ainda… os algoritmos são eficientes? O momento dos cálculos é conveniente? Que outras formas de os fazer haveria? Qual o gargalo, E/S ou processador? E vai por aí afora. Ok, ok... Vou voltar no tempo para tentar ajudar na dúvida original do Eder Sousa: Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder, eu diria que seria interessante neste caso saber algumas coisas: 1- O que você chama de classificações, o que faz exatamente? 2- De quanto em quanto tempo esta operação é executada? 3- Os dados gerados por estas classificações são armazenados em algum lugar? é bem provável que o modelo atual (transacional) nao atenderá a essa necessidade de emissão de relatórios em tempo real, sendo necessária a criação de novas estruturas para atender a essa finalidade. Uma coisa não exclui a outra. Novas estruturas não significam que o modelo atual não atende; é tudo questão de modelo físico e circunstâncias. Leandro, se eu tenho meu modelo de dados, e uma necessidade de uma determinada consulta que, utilizando as estruturas atuais, já foi otimizada ao máximo e o tempo decorrido não atende a necessidade do cliente, como vou dizer que esse modelo atual, sem ter nenhuma modificação, atende a minha necessidade? Marçal de Lima Hokama -- _ Faça transações bancárias de maneira segura. Baixe agora o Novo Internet Explorer 8. http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmailutm_medium=Taglineutm_content=Tag2utm_campaign=IE8 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Qual estrutura utilizar?
Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 lis...@softpira.com: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: Normalmente, o que se quer são dois esquemas na mesma base ou, mais raramente, dois servidores diferentes. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. 7K registros em que período de tempo? 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). Nada disso é significativo se não soubermos que carga geram esses cálculos. 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Impossível dizer sem saber o perfil de execução de cada tarefa. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Olá, 2009/12/29 lis...@softpira.com Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; Acho que pode ser um novo esquema e não necessariamente um novo banco de dados, pois se você tiver que comunicar os dois bancos você terá que usar um dblink, enquanto que se você usar esquemas um simples JOIN especificando o esquema resolve o problema. Uma pergunta. Vocês já fizeram um medição para definição do work_mem com 100MB? Sem uma noção dos processos (consultas) e vendo de longe me parece um valor bem alto. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. Beleza. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Eu não tomaria a decisão de separar em 2 servidores sem mais informações. O procedimento será realizado todos os dias ou será em todo o fim de mês que os dados serão processados? E o arquivo de configuração do postgresql.conf como está? Foi realizada alguma configuração nele? Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Já pensou em desenhar essa solução usando trigger de inserção? Para cada nova venda vc atualiza as tabelas de estatísticas, com isso vc pode listar os dados das tabela evitando demasiados joins e ainda ganha em saber o desempenho de cada vendedor/filial diariamente(ou até por minuto). Quando eu trabalhava com voip(~150K registro/ligações) essa foi a solução, mas cada caso é um caso. 2009/12/29 JotaComm jota.c...@gmail.com Olá, 2009/12/29 lis...@softpira.com Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; Acho que pode ser um novo esquema e não necessariamente um novo banco de dados, pois se você tiver que comunicar os dois bancos você terá que usar um dblink, enquanto que se você usar esquemas um simples JOIN especificando o esquema resolve o problema. Uma pergunta. Vocês já fizeram um medição para definição do work_mem com 100MB? Sem uma noção dos processos (consultas) e vendo de longe me parece um valor bem alto. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. Beleza. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Eu não tomaria a decisão de separar em 2 servidores sem mais informações. O procedimento será realizado todos os dias ou será em todo o fim de mês que os dados serão processados? E o arquivo de configuração do postgresql.conf como está? Foi realizada alguma configuração nele? Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- [ ]'s Shairon Toledo http://www.google.com/profiles/shairon.toledo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 Shairon Toledo shairon.tol...@gmail.com: Já pensou em desenhar essa solução usando trigger de inserção? Ou visões materializadas. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Shairon.. neste caso estou precisando de inforamções dos produtos... não pensei neste caso... vou tentar para ver como fica.. abraços!!! On Tue, 29 Dec 2009 13:02:53 -0500, Shairon Toledo shairon.tol...@gmail.com wrote: Já pensou em desenhar essa solução usando trigger de inserção? Para cada nova venda vc atualiza as tabelas de estatísticas, com isso vc pode listar os dados das tabela evitando demasiados joins e ainda ganha em saber o desempenho de cada vendedor/filial diariamente(ou até por minuto). Quando eu trabalhava com voip(~150K registro/ligações) essa foi a solução, mas cada caso é um caso. 2009/12/29 JotaComm jota.c...@gmail.com Olá, 2009/12/29 lis...@softpira.com Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; Acho que pode ser um novo esquema e não necessariamente um novo banco de dados, pois se você tiver que comunicar os dois bancos você terá que usar um dblink, enquanto que se você usar esquemas um simples JOIN especificando o esquema resolve o problema. Uma pergunta. Vocês já fizeram um medição para definição do work_mem com 100MB? Sem uma noção dos processos (consultas) e vendo de longe me parece um valor bem alto. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. Beleza. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Eu não tomaria a decisão de separar em 2 servidores sem mais informações. O procedimento será realizado todos os dias ou será em todo o fim de mês que os dados serão processados? E o arquivo de configuração do postgresql.conf como está? Foi realizada alguma configuração nele? Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
On Tue, 29 Dec 2009 16:39:07 -0200, Leandro DUTRA leandro.gfc.du...@gmail.com wrote: 2009/12/29 Shairon Toledo shairon.tol...@gmail.com: Já pensou em desenhar essa solução usando trigger de inserção? Ou visões materializadas. Isto eu já pensei ... rss Mas não foi muito bom o desempenho... ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Opa, To: pgbr-geral@listas.postgresql.org.br Date: Tue, 29 Dec 2009 14:09:49 -0200 From: lis...@softpira.com Subject: Re: [pgbr-geral] Qual estrutura utilizar? Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). Pelo que foi mencionado no item 3, com o volume de dados envolvido, não há dúvidas de que vai ser necessário um modelo diferenciado do modelo transacional atual para armazenar os dados consolidados. O que vai impactar aqui é a periodicidade em que esses dados consolidados devem ser atualizados (por exemplo: mensal, diário ou tempo real), pois aí as rotinas de consolidação deverão ser executadas mais vezes e aí vai o poder de processamento. Se houver uma expectativa de aumento de demanda de dados consolidados, pode ser interessante partir para um datamart e para um modelo dimensional. Marçal de Lima Hokama - _ Faça transações bancárias de maneira segura. Baixe agora o Novo Internet Explorer 8. http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmailutm_medium=Taglineutm_content=Tag2utm_campaign=IE8 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 lis...@softpira.com: On Tue, 29 Dec 2009 16:39:07 -0200, Leandro DUTRA leandro.gfc.du...@gmail.com wrote: Ou visões materializadas. Mas não foi muito bom o desempenho... Nenhuma idéia se aplica a todas as situações… -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 Marcal Hokama mhok...@hotmail.com: com o volume de dados envolvido, não há dúvidas de que vai ser necessário um modelo diferenciado do modelo transacional Não necessariamente… não sabemos o suficiente sobre complexidade dos cálculos, como serão executados, como serão consultados os resultados… se esses volumes serão gerados ou apenas usados… se o gargalo é processamento ou E/S (geralmente é E/S)… Outra coisa, muito que geralmente se considera como ‘modelo diferenciado do transacional’ pode ser implantado com extensões deste último, como visões materializadas, gatilhos c. Datamart e modelo dimensional (como, aliás, prefixos de nomes de objetos, chaves artificiais, desnormalização c) amiúde são as respostas certas para as questões erradas — ou respostas em buscas de questões. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Olá, 2009/12/29 lis...@softpira.com Shairon.. neste caso estou precisando de inforamções dos produtos... não pensei neste caso... vou tentar para ver como fica.. abraços!!! Mas agora fiquei na dúvida. A sua carga será feita em massa, isto é, em lote ou pode ser a cada inserção? Comento isso porque são duas coisas distintas, uma é mais transacional (inserção via trigger) e a outra não, fica mais caracterizada para o lado de um data mart e datawarehouse. On Tue, 29 Dec 2009 13:02:53 -0500, Shairon Toledo shairon.tol...@gmail.com wrote: Já pensou em desenhar essa solução usando trigger de inserção? Para cada nova venda vc atualiza as tabelas de estatísticas, com isso vc pode listar os dados das tabela evitando demasiados joins e ainda ganha em saber o desempenho de cada vendedor/filial diariamente(ou até por minuto). Quando eu trabalhava com voip(~150K registro/ligações) essa foi a solução, mas cada caso é um caso. 2009/12/29 JotaComm jota.c...@gmail.com Olá, 2009/12/29 lis...@softpira.com Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; Acho que pode ser um novo esquema e não necessariamente um novo banco de dados, pois se você tiver que comunicar os dois bancos você terá que usar um dblink, enquanto que se você usar esquemas um simples JOIN especificando o esquema resolve o problema. Uma pergunta. Vocês já fizeram um medição para definição do work_mem com 100MB? Sem uma noção dos processos (consultas) e vendo de longe me parece um valor bem alto. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. Beleza. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Eu não tomaria a decisão de separar em 2 servidores sem mais informações. O procedimento será realizado todos os dias ou será em todo o fim de mês que os dados serão processados? E o arquivo de configuração do postgresql.conf como está? Foi realizada alguma configuração nele? Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s
Re: [pgbr-geral] Qual estrutura utilizar?
a Carga de dados é efetuada via COPY... On Tue, 29 Dec 2009 17:27:08 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Shairon.. neste caso estou precisando de inforamções dos produtos... não pensei neste caso... vou tentar para ver como fica.. abraços!!! Mas agora fiquei na dúvida. A sua carga será feita em massa, isto é, em lote ou pode ser a cada inserção? Comento isso porque são duas coisas distintas, uma é mais transacional (inserção via trigger) e a outra não, fica mais caracterizada para o lado de um data mart e datawarehouse. On Tue, 29 Dec 2009 13:02:53 -0500, Shairon Toledo shairon.tol...@gmail.com wrote: Já pensou em desenhar essa solução usando trigger de inserção? Para cada nova venda vc atualiza as tabelas de estatísticas, com isso vc pode listar os dados das tabela evitando demasiados joins e ainda ganha em saber o desempenho de cada vendedor/filial diariamente(ou até por minuto). Quando eu trabalhava com voip(~150K registro/ligações) essa foi a solução, mas cada caso é um caso. 2009/12/29 JotaComm jota.c...@gmail.com Olá, 2009/12/29 lis...@softpira.com Graaande JP tudo bem??? Vamos por partes... Um novo database para mim: 1.) O mesmo servidor possuindo dois BANCO DE DADOS: EXEMPLO: CREATE DATABASE producao WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; CREATE DATABASE producao2 WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1; ALTER DATABASE producao SET work_mem=100MB; Acho que pode ser um novo esquema e não necessariamente um novo banco de dados, pois se você tiver que comunicar os dois bancos você terá que usar um dblink, enquanto que se você usar esquemas um simples JOIN especificando o esquema resolve o problema. Uma pergunta. Vocês já fizeram um medição para definição do work_mem com 100MB? Sem uma noção dos processos (consultas) e vendo de longe me parece um valor bem alto. 2.) Sim a carga de 50.000 registros será em massa (no caso acima será no producao2) porém no producao está a todo o momento incluindo informações, em torno de 7.000 registros que neste caso não estarei usando em cálculos. Beleza. 3.) A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente 1.500.000 registros), 13800 produtos, das 55 filiais (solicitação de amigos consultores..r). 4.) O postgresql é a versão 8.3.5 e a segundo a ultima consultoria (neste caso do Banco de Dados) nos informaram o ideal é separar estas ações em servidores diferentes pq temos dois bancos distintos, um para carga e outro para classificação (Consultas, cálculos, classificações). Eu não tomaria a decisão de separar em 2 servidores sem mais informações. O procedimento será realizado todos os dias ou será em todo o fim de mês que os dados serão processados? E o arquivo de configuração do postgresql.conf como está? Foi realizada alguma configuração nele? Abraços, Eder Sousa On Tue, 29 Dec 2009 13:56:58 -0200, JotaComm jota.c...@gmail.com wrote: Olá, 2009/12/29 lis...@softpira.com Tenho um sistema de Distribuição onde 99% das atividades é inclusão de registros que por sua vez está incluido em um database, surgiu a necessidade de implantar um novo database onde será efetuado a carga de dados diárias com aproximadamente 50.000 registros dias, porém neste database será classificado N calculo para administrar o estoque de 55 filiais. O que você considera um novo database. É um novo banco de dados separado? Ou um novo esquema dentro do banco de dados atual? A carga será em massa, isto é, em determinado horário serão inseridos 50 mil registros ou isso será feito durante o dia todo? Não entendi a última parte: Neste database será classificado N cálculo para administrar... Até a carga de dados funciona maravilhosamente, porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Pergunto: Neste caso é necessário um novo servidor para executar os cálculos, ao invés de efetuar no mesmo servidor?? Esta classificação é realizada a todo o momento ou em horários específicos? Como está a configuração do postgresql.conf? Só para conhecimento o servidor é um Quadcore com 8GB RAM e 1 Tera de HD []s Eder Sousa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s
Re: [pgbr-geral] Qual estrutura utilizar?
From: leandro.gfc.du...@gmail.com Date: Tue, 29 Dec 2009 17:24:55 -0200 To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Qual estrutura utilizar? 2009/12/29 Marcal Hokama : com o volume de dados envolvido, não há dúvidas de que vai ser necessário um modelo diferenciado do modelo transacional Não necessariamente… não sabemos o suficiente sobre complexidade dos cálculos, como serão executados, como serão consultados os resultados… se esses volumes serão gerados ou apenas usados… se o gargalo é processamento ou E/S (geralmente é E/S)… Concordo, mas pelo que foi informado: A Classificação que mencionei, são cálculos de vendas nos últimos 3 meses (aproximadamente 4.500.000 registros), 30 dias (aproximadamente1.500.000 registros), 13800 produtos, das 55 filiais (solicitação deamigos consultores..r). Já pode se perceber que relatórios tipo vendas x produto, vendas x filial, vendas x produto x filial, com as quantidades envolvidas, haverá uma demanda de processamento (envolvendo CPU, memória e E/S), até por outra informação dada: porém quando inicia a execução das classificações o desempenho do servidor cai drasticamente. Outra coisa, muito que geralmente se considera como ‘modelo diferenciado do transacional’ pode ser implantado com extensões deste último, como visões materializadas, gatilhos c. Uma solução pode ser a armazenagem dos dados consolidados para tornar mais rápida a emissão de relatórios. Pode ser tanto tabelas ou views materializadas modeladas de acordo com a necessidade e do relatório a ser emitido. Para a alimentação destas estruturas podem ser utilizadas rotinas em lote ou triggers. São detalhes de implementação, mas o importante é que é bem provável que o modelo atual (transacional) nao atenderá a essa necessidade de emissão de relatórios em tempo real, sendo necessária a criação de novas estruturas para atender a essa finalidade. Mas a sua implementação vai depender, basicamente, da periodicidade em que as rotinas de consolidação serão executadas. Datamart e modelo dimensional (como, aliás, prefixos de nomes de objetos, chaves artificiais, desnormalização c) amiúde são as respostas certas para as questões erradas — ou respostas em buscas de questões. Tudo depende do contexto em que vai ser aplicado. Existem soluções que não são adequadas para determinados casos e para outros são. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm Sent from Sao Paulo, SP, Brazil ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Marçal de Lima Hokama - _ Fique protegido de ameças utilizando o Novo Internet Explorer 8. Baixe já, é grátis! http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmailutm_medium=Taglineutm_content=Tag1utm_campaign=IE8 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 lis...@softpira.com a Carga de dados é efetuada via COPY... Vc já deu uma olhada nesse cara [1] ? [1] http://pgbulkload.projects.postgresql.org/ -- Fabrízio de Royes Mello Blog sobre TI: http://fabriziomello.blogspot.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
Leandro, Na verdade, chave serial é contradição em termos, porque se é serial não vai garantir unicidade. Sim, mas para achar o registro e fazer JOINs, é o que há em termos de praticidade e desempenho, especialmente se você quiser usar a chave para identificar alterações concorrentes sobre o mesmo registro ou ainda se precisar alterar a chave natural de um registro numa tabela com um monte de tabelas filhas. no máximo, chave artificial, o que é um negócio meio engraçado que só entra no modelo relacional como gambiarra por motivos de desempenho ... E bota desempenho nisso! A melhoria é grande demais para ser ignorada, pois quase todos os índices ficarão menores e com distribuição estatística mais evidente (do ponto de vista do banco de dados) usando uma PK numérica de um só campo. Além do mais, ninguém falou em não declarar chaves alternativas para evitar duplicidades. Tudo bem, concordo que conceitualmente é uma atrocidade, mas estamos falando de modelo físico, não do modelo lógico... Mozart ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Qual estrutura utilizar?
2009/12/29 Mozart Hasse mozart.ha...@usa.net: Na verdade, chave serial é contradição em termos, porque se é serial não vai garantir unicidade. Sim, mas para achar o registro e fazer JOINs, é o que há em termos de praticidade e desempenho Depende, como sempre. especialmente se você quiser usar a chave para identificar alterações concorrentes sobre o mesmo registro Nível de isolamento serializável, e de quebra a aplicação fica mais robusta. Agora me dei conta… será que teus problemas recorrentes de desempenho não são por controle de transações na aplicação? se precisar alterar a chave natural de um registro numa tabela com um monte de tabelas filhas. ON UPDATE CASCADE A melhoria é grande demais para ser ignorada, pois quase todos os índices ficarão menores Nana-nina-não. Ou melhor, depende. Tabela mãe pequena e pouco usada com tabelas filhas grandes, pode ser, se não forçar junções demais. Mas sempre haverá um índice a mais, tanto em disco quanto em memória, ocupando também cache e exigindo atualizações. e com distribuição estatística mais evidente (do ponto de vista do banco de dados) usando uma PK numérica de um só campo. Não. Além do mais, ninguém falou em não declarar chaves alternativas para evitar duplicidades. Mas é o que costuma acabar acontecendo. Tudo bem, concordo que conceitualmente é uma atrocidade, mas estamos falando de modelo físico, não do modelo lógico... Esse é o problema do SQL, falta de independência de dados. Mesmo em SQL, os efeitos técnicos e culturais das chaves artificiais e da normalização deficiente, que costumam andar juntos, geralmente acaba prejudicando não só desempenho quanto robustez. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 9406 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 3854 7191 ICQ: aim:GoIM?screenname=61287803 +55 (11) 5546 8716msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral