[pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Moisés P . Sena
Bom dia pessoal!

Estou modelando um sistema de autenticação de usuarios mas estou na duvida
(Do ponto de vista do BD, e nao da aplicacao):

a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

O que voces me falam de performance em usar VARCHAR ou BIGINT?

Existe algum outro campo de texto mais rapido que VARCHAR?

Abraços,

-- 
Moisés P. Sena
(Analista e desenvolvedor de sistemas WEB e mobile)
http://www.moisespsena.com
http://linux.moisespsena.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] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Fernando Franquini 'capin'
Moisés,

bom dia, mas porque precisa ser login PK?
Porque você não faz o basico: Criar um Codigo como PK e 'colocar' o Codigo
no GRUPO?

No meu ponto de vista tais preparando um *monstrinho*, caso não seja um
TESTE SEU!

Att,
capin

2012/2/17 Moisés P. Sena moisesps...@gmail.com

 Bom dia pessoal!

 Estou modelando um sistema de autenticação de usuarios mas estou na duvida
 (Do ponto de vista do BD, e nao da aplicacao):

 a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
 b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

 O que voces me falam de performance em usar VARCHAR ou BIGINT?

 Existe algum outro campo de texto mais rapido que VARCHAR?

 Abraços,

 --
 Moisés P. Sena
 (Analista e desenvolvedor de sistemas WEB e mobile)
 http://www.moisespsena.com
 http://linux.moisespsena.com

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Fernando Franquini - Capin
Graduado Bacharel em Ciencias da Computação - UFSC
Analista de Sistemas e de Banco de Dados / DBA
Contatos: fernando.franqu...@gmail.com / 048.9902.4047
Florianópolis - SC - Brasil
http://franquini.wordpress.com/
http://franquini.wordpress.com/
http://br.linkedin.com/in/capin
http://wf5.com.br/
http://twitter.com/dbacapin https://twitter.com/#!/dbacapin
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Moisés P . Sena
Em 17 de fevereiro de 2012 09:57, Fernando Franquini 'capin' 
fernando.franqu...@gmail.com escreveu:

 Moisés,

 bom dia, mas porque precisa ser login PK?
 Porque você não faz o basico: Criar um Codigo como PK e 'colocar' o Codigo
 no GRUPO?

 No meu ponto de vista tais preparando um *monstrinho*, caso não seja um
 TESTE SEU!

 Att,
 capin


Eu sempre uso um BIGSERIAL, mas estou querendo entender o porque da coisa.
É também porque tive estudando BD NoSQL e eles utilizar TEXTO nas chaves e
tal.
Mas nao estou comparando um com outro?

porque um *monstrinho* ? porque usar BIGINT ou NAO se o login é também um
valor único??

Abraços,

-- 
Moisés P. Sena
(Analista e desenvolvedor de sistemas WEB e mobile)
http://www.moisespsena.com
http://linux.moisespsena.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] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Moisés P . Sena
Corrigindo texto:

*Mas nao estou comparando um com outro. [ É UMA AFIRMAÇÂO, e NAO UMA
 PERGUNTA ]*


---
Moisés P. Sena
(Analista e desenvolvedor de sistemas WEB e mobile)
http://www.moisespsena.com
http://linux.moisespsena.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] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Leandro Guimarães Faria Corce DUTRA
Le 2012-F-17  09h50, Moisés P. Sena a écrit :

 a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
 b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

 O que voces me falam de performance em usar VARCHAR ou BIGINT?

 Existe algum outro campo de texto mais rapido que VARCHAR?

As diferenças não são relevantes.  O que queres fazer é o ideal.



-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 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] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Leandro Guimarães Faria Corce DUTRA
Le 2012-F-17  09h57, Fernando Franquini 'capin' a écrit :

 bom dia, mas porque precisa ser login PK?

Porque é o correto, sendo uma chave natural.


 Porque você não faz o basico: Criar um Codigo como PK e 'colocar' o
 Codigo no GRUPO?

Porque está errado.  Código engorda o modelo, o torna opaco, força 
junções desnecessária, suja cache e ocupa disco, gera E/S e, 
principalmente, não garante unicidade.


 No meu ponto de vista tais preparando um *monstrinho*, caso não seja um
 TESTE SEU!

Por quê?



-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 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] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flavio Henrique Araque Gurgel
 a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
 b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

 O que voces me falam de performance em usar VARCHAR ou BIGINT?

 Existe algum outro campo de texto mais rapido que VARCHAR?

 As diferenças não são relevantes.  O que queres fazer é o ideal.

Li alguns testes de fora do Brasil recomendando usar char ao invés de
varchar quando se necessita maior desempenho. Não sei se ainda se
aplicam nas versões recentes do PostgreSQL.
Fora isso, o impacto no desempenho em relação a números é irrelevante.

[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Euler Taveira de Oliveira eu...@timbira.com:

 Apostaria alguns centavos que o CHAR é um pouco mais lento do que o VARCHAR.

Sério?  Por quê, e seria relevante em que escala de operações?

Se alguém puder nos refrescar a memória, tinha um artigo do Fetter a
respeito, não?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flavio Henrique Araque Gurgel
 Sério?  Por quê, e seria relevante em que escala de operações?

 Se alguém puder nos refrescar a memória, tinha um artigo do Fetter a
 respeito, não?

Euler já esclareceu. Nas versões recentes, não faz mais sentido algum.

[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio

Em 17/02/2012 09:50, Moisés P. Sena escreveu:
 Bom dia pessoal!

 Estou modelando um sistema de autenticação de usuarios mas estou na
 duvida (Do ponto de vista do BD, e nao da aplicacao):

 a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
 b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

 O que voces me falam de performance em usar VARCHAR ou BIGINT?

 Existe algum outro campo de texto mais rapido que VARCHAR?

Acho que depende muito, tenho sistemas de controle de entregas e 
portanto uma tabela de tracking de cada uma destas entregas. Nesta 
tabela tenho informações de o que cada usuário que manuseou esta entrega 
fez.

Em um cliente esta tabela tem mais de 2 bilhões de registros. Antes eu 
utilizava o código de barras das entregas como sendo minha chave 
primária e portanto, tipo varchar. Quando fiz testes com biginteger tive 
uma melhoria muito substancial de performance e de espaço em disco 
ocupado, além de índices muito menores.

Eu quase sempre utilizo chaves artificiais. Porque conforme já 
expressei minha opinião aqui na lista, na prática, é quase impossível 
conseguir chaves naturais fiáveis. São poucas as entidades que o possuem.

Cada um sabe onde seu sapato aperta.

Levando para seu exemplo, tente imaginar, que nesta tabela de tracking 
eu armazeno o usuário e ao invés de gravar o código deste usuário 
(integer), 123 por exemplo, eu gravasse o nome: EDMILSON.NASCIMENTO. 
Só com este campo desta tabela eu teria cerca de 27 GB de espaço 
economizado, sem contar os índices. Por mais que tentem me convencer que 
a diferença de performance não é grande, para mim é suficientemente grande.

Abraço,

--
Shander Lyrio
http://about.me/shander

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio

Em 17/02/2012 09:50, Moisés P. Sena escreveu:
 Bom dia pessoal!

 Estou modelando um sistema de autenticação de usuarios mas estou na
 duvida (Do ponto de vista do BD, e nao da aplicacao):

 a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
 b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)

 O que voces me falam de performance em usar VARCHAR ou BIGINT?

 Existe algum outro campo de texto mais rapido que VARCHAR?

Acho que depende muito, tenho sistemas de controle de entregas e 
portanto uma tabela de tracking de cada uma destas entregas. Nesta 
tabela tenho informações de o que cada usuário que manuseou esta entrega 
fez.

Em um cliente esta tabela tem mais de 2 bilhões de registros. Antes eu 
utilizava o código de barras das entregas como sendo minha chave 
primária e portanto, tipo varchar. Quando fiz testes com biginteger tive 
uma melhoria muito substancial de performance e de espaço em disco 
ocupado, além de índices muito menores.

Eu quase sempre utilizo chaves artificiais. Porque conforme já 
expressei minha opinião aqui na lista, na prática, é quase impossível 
conseguir chaves naturais fiáveis. São poucas as entidades que o possuem.

Cada um sabe onde seu sapato aperta.

Levando para seu exemplo, tente imaginar, que nesta tabela de tracking 
eu armazeno o usuário e ao invés de gravar o código deste usuário 
(integer), 123 por exemplo, eu gravasse o nome: EDMILSON.NASCIMENTO. 
Só com este campo desta tabela eu teria cerca de 27 GB de espaço 
economizado, sem contar os índices. Por mais que tentem me convencer que 
a diferença de performance não é grande, para mim é suficientemente grande.

Abraço,

--
Shander Lyrio
http://about.me/shander

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Shander Lyrio shan...@nucleo45.com.br:

        Em um cliente esta tabela tem mais de 2 bilhões de registros. Antes eu
 utilizava o código de barras das entregas como sendo minha chave
 primária e portanto, tipo varchar. Quando fiz testes com biginteger tive
 uma melhoria muito substancial de performance e de espaço em disco
 ocupado, além de índices muito menores.

Teu caso nem discuto, como já disse antes há situações onde as
limitações tecnológicas dos sistemas SQL, e até do SQL em si, nos
forçam a expor as chaves artificiais.  Mas não são o caso geral.

Já disse antes, mas repito: os casos em que é razoável considerar o
caso de usar chaves artificiais são massas de dados muito grandes, e
chaves exportadas como estrangeiras a tabelas filhas bem maiores que
as tabelas mães.  Parece que teu caso está nas duas categorias.  Mesmo
assim, eu tentaria avaliar os ganhos óbvios de espaço face aos não tão
óbvios custos de junções.


        Eu quase sempre utilizo chaves artificiais. Porque conforme já
 expressei minha opinião aqui na lista, na prática, é quase impossível
 conseguir chaves naturais fiáveis. São poucas as entidades que o possuem.

Aí é que discordo, e nunca ninguém mostrou aqui.  Pelo contrário, se
não há chave natural, não é entidade ou não está bem analisada.  Dá
para fazer funcionar, mas longe do melhor.


        Cada um sabe onde seu sapato aperta.

Exato.  Amiúde, é até falta de condições — tempo, recursos,
informações, conhecimento, confiança, um SGBD decente — de fazer uma
análise e implementação decentes.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Euler Taveira de Oliveira
On 17-02-2012 12:10, Guimarães Faria Corcete DUTRA, Leandro wrote:
 2012/2/17 Euler Taveira de Oliveira eu...@timbira.com:

 Apostaria alguns centavos que o CHAR é um pouco mais lento do que o VARCHAR.
 
 Sério?  Por quê, e seria relevante em que escala de operações?
 
Naquelas operações cuja cadeia de caracteres armazenadas é menor do que n (em
CHAR(n)). Isso por conta de ter que fazer o preenchimento com espaços.


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


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 14:13, Guimarães Faria Corcete DUTRA, Leandro escreveu:
 Eu quase sempre utilizo chaves artificiais. Porque conforme já
 expressei minha opinião aqui na lista, na prática, é quase impossível
 conseguir chaves naturais fiáveis. São poucas as entidades que o possuem.

 Aí é que discordo, e nunca ninguém mostrou aqui.  Pelo contrário, se
 não há chave natural, não é entidade ou não está bem analisada.  Dá
 para fazer funcionar, mas longe do melhor.

Até onde estudei sobre bancos de dados, para ser considerada uma 
entidade precisamos ter uma chave que o identifique, seja natural ou 
artificial. Natural quando o atributo faz parte do objeto modelado e 
artificial quando não. Isto é bonito filosoficamente, já discutimos 
sobre isto e você não conseguiu me dar uma chave natural fiável para um 
Cliente que é uma entidade super comum. Quem conseguiria analisar ela 
bem? Ela não é uma entidade?

Se tem uma chave única, natural ou não, ela é uma entidade, sua 
afirmação, por mais categórica que seja, não consegue mudar este fato.

A boa prática indica que devemos sempre dar preferencia aos atributos 
naturais para evitar a repetição. Esta discussão sempre me faz lembrar 
das aulas de filosofia na Faculdade. Para um sistema especialista, com 
regras criteriosamente definidas dentro de uma empresa, e que somente 
rode para esta empresa, sua abordagem até faz sentido. Mas este mundo 
ideal não passa daí.

Quem desenvolve sistemas para vários clientes, com regras diferentes 
percebe rapidamente, que ser generalista resolve os problemas mais 
facilmente e sem dor, um índice unique é muito mais simples para 
garantir unicidade de que convencer o cliente que ele tem que cadastrar 
diversas informações que não serão usadas no negócio dele só para que o 
modelo de dados fique bonitinho e para que a lista de postgresql não o 
ache opaco e sem graça.

 Cada um sabe onde seu sapato aperta.

 Exato.  Amiúde, é até falta de condições — tempo, recursos,
 informações, conhecimento, confiança, um SGBD decente — de fazer uma
 análise e implementação decentes.

Ou não, acho que apenas o tipo de nicho de sistemas serviria para 
diferenciar, sistema que só roda em um único cliente com regras muito 
bem definidas ou mais de um com regras bem definidas e compartilhadas, e 
sistemas que rodam em vários clientes com regras muito diversificadas.

No geral, são muito mais raros os sistemas feitos para rodar em apenas 
um cliente.

Abraço,

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Shander Lyrio shan...@nucleo45.com.br:

        Até onde estudei sobre bancos de dados, para ser considerada uma
 entidade precisamos ter uma chave que o identifique, seja natural ou
 artificial.

Não, a artificial, como diz o nome, é apenas um artifício físico, que
por limitações do SQL aparece para o usuário.  Idealmente, somente o
DBA a veria.  Ela não identifica a tupla (lógica), tanto que não
garante unicidade; apenas identifica o registro (físico).  Sem
identificação, não é entidade, nem relação.


 Natural quando o atributo faz parte do objeto modelado e
 artificial quando não. Isto é bonito filosoficamente, já discutimos
 sobre isto e você não conseguiu me dar uma chave natural fiável para um
 Cliente que é uma entidade super comum. Quem conseguiria analisar ela
 bem? Ela não é uma entidade?

Consegui, como não?  Mas não existe solução genérica, é sempre
conforme os requisitos e regras organizacionais (vulgo ‘de negócios’).


        Quem desenvolve sistemas para vários clientes, com regras diferentes
 percebe rapidamente, que ser generalista resolve os problemas mais
 facilmente e sem dor, um índice unique é muito mais simples para
 garantir unicidade

Só que não garante unicidade… e tenho cabelos brancos por isso… é
simples: sem chave natural, é só ir inserindo as mesmas informações,
vez após vez, e pronto.  Cadê a unicidade?  Se, por acaso, o sistema
confere algo para evitar essa multiplicação de dados, esse algo é a
chave natural…


 de que convencer o cliente que ele tem que cadastrar
 diversas informações que não serão usadas no negócio dele

Aí o problema é um modelo genérico para um cliente com necessidades
específicas.  Pode ser que não valha a pena atender suas necessidades,
mas essa é uma decisão de negócio de correr os riscos de negócio
decorrentes da modelagem inespecífica.


        No geral, são muito mais raros os sistemas feitos para rodar em apenas
 um cliente.

Na tua experiência, acredito…
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 15:05, Guimarães Faria Corcete DUTRA, Leandro escreveu:
 Consegui, como não?  Mas não existe solução genérica, é sempre
 conforme os requisitos e regras organizacionais (vulgo ‘de negócios’).

Conseguiu, eu não me lembro disso não, pode me refrescar a memória? 
Qual atributo usou? Depende da empresa né? Você sugere então que 
tenhamos um modelo de banco de dados para cada empresa. Este mundo 
fantástico não existe.

 Quem desenvolve sistemas para vários clientes, com regras diferentes
 percebe rapidamente, que ser generalista resolve os problemas mais
 facilmente e sem dor, um índice unique é muito mais simples para
 garantir unicidade

 Só que não garante unicidade… e tenho cabelos brancos por isso… é
 simples: sem chave natural, é só ir inserindo as mesmas informações,
 vez após vez, e pronto.  Cadê a unicidade?  Se, por acaso, o sistema
 confere algo para evitar essa multiplicação de dados, esse algo é a
 chave natural…

Como é que é?? Um índice unique não garante unidade?? Para que ele 
existe então? No banco de dados, uma chave primária tem garantia de 
unicidade exatamente pelo índice unique que é gerado. O fato é que o 
modelo genérico que eu proponho, resolve o problema para qualquer tipo 
de cliente. Se ele cadastra o campo em que eu tenho um índice unique o 
sistema avisa da duplicidade, se não não avisa, o risco fica por conta 
do cliente sem que eu o obrigue a fazê-lo, isto é uma simples decisão de 
engenharia, custo/benefício da solução. Da sua forma, o cliente é 
obrigado a fazer caso contrário o sistema não funciona.

 No geral, são muito mais raros os sistemas feitos para rodar em 
 apenas
 um cliente.

 Na tua experiência, acredito…

Fora quando a empresa desenvolve seu próprio sistema (exceção), os 
sistemas são feitos geralmente para rodar em vários clientes. Exemplos? 
SAP? Oracle? postgresql? Inúmeros ERP's e CRM's. Conta-se nos dedos os 
sistemas feitos para uma única empresa, então impor sua realidade num 
mundo que não é assim tão perfeito quando você sonha não ajuda.

Seria muito legal se cada cliente tivesse o seu sistema específico, com 
seu banco de dados modelados de acordo com suas regras (a maioria nem 
tem estas regras), eu teria serviço de DBA para o resto da minha vida.

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Shander Lyrio shan...@nucleo45.com.br:

        Conseguiu, eu não me lembro disso não, pode me refrescar a memória?
 Qual atributo usou? Depende da empresa né? Você sugere então que
 tenhamos um modelo de banco de dados para cada empresa. Este mundo
 fantástico não existe.

Uai, devo ser um fantasma então…


        Como é que é?? Um índice unique não garante unidade?? Para que ele
 existe então?

Tentarei evitar me repetir, então só direi que, ao reler minhas
mensagens anteriores, tem‐se de entender a distinção entre modelos
lógico (chave) e físico (índice) — infelizmente, o SQL não diferencia
isso claramente.


 Se ele cadastra o campo em que eu tenho um índice unique o
 sistema avisa da duplicidade, se não não avisa, o risco fica por conta
 do cliente sem que eu o obrigue a fazê-lo

Isso eu não entendi…


 isto é uma simples decisão de
 engenharia, custo/benefício da solução.

Claro!


        Fora quando a empresa desenvolve seu próprio sistema (exceção), os
 sistemas são feitos geralmente para rodar em vários clientes. Exemplos?
 SAP? Oracle? postgresql? Inúmeros ERP's e CRM's. Conta-se nos dedos os
 sistemas feitos para uma única empresa, então impor sua realidade num
 mundo que não é assim tão perfeito quando você sonha não ajuda.

Sistemas genéricos há aos montes, e há aos montes personalizações, e
sistemas específicos.


        Seria muito legal se cada cliente tivesse o seu sistema específico, com
 seu banco de dados modelados de acordo com suas regras (a maioria nem
 tem estas regras), eu teria serviço de DBA para o resto da minha vida.

Como eu disse, é a tentação dos geradores de código.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 15:55, Guimarães Faria Corcete DUTRA, Leandro escreveu:

 Uai, devo ser um fantasma então…

Não que seja fantasma, mas que vive num mundo muito especial e perfeito.

 lógico (chave) e físico (índice) — infelizmente, o SQL não diferencia
 isso claramente.

Se estamos falando de postgresql, que usa o sql, porque não detém suas 
respostas a este mundo falível?

 Se ele cadastra o campo em que eu tenho um índice unique o
 sistema avisa da duplicidade, se não não avisa, o risco fica por conta
 do cliente sem que eu o obrigue a fazê-lo

 Isso eu não entendi…

No seu mundo perfeito onde todos os clientes tenham um documento único 
padrão que não se repete e que o acompanha para o resto da vida, você 
pode usar este atributo como chave primária natural, seu sistema garante 
unicidade para casos de CPF repetidos e portanto barra clientes repetidos.
No meu mundo imperfeito os clientes tem o CPF mas podem ter esquecido 
em casa, e não saber de cor, nem por isto eu quero perder a venda, então 
o meu cliente, pode deixar de vender para deixar o banco de dados fofo e 
cuti cuti, ou vender, e correr o risco de ter um cliente duplicado no 
sistema. Se o cliente trouxer o CPF e eu for cadastrá-lo, o índice 
unique neste campo garante a mesma unicidade que no seu modelo perfeito, 
mas permite que o meu cliente escolha o que é melhor par ele, duplicar 
ou não duplicar, cadastrar ou não o cpf.

Abraço,

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flávio Alves Granato
Em 17 de fevereiro de 2012 15:55, Guimarães Faria Corcete DUTRA,
Leandro l...@dutras.org escreveu:
 2012/2/17 Shander Lyrio shan...@nucleo45.com.br:
 Se ele cadastra o campo em que eu tenho um índice unique o
 sistema avisa da duplicidade, se não não avisa, o risco fica por conta
 do cliente sem que eu o obrigue a fazê-lo

 Isso eu não entendi…

Sério, como é que você consegue só avisar que o dado esta sendo
duplicado com um Index Unique?

O que vejo, é que o Leandro utiliza chaves primárias para criar suas
chaves naturais e o Shander não cria chaves primarias ou invés cria
indices únicos para alguns campos que ele julga necessário. Ou será
que você deixa tudo por conta da aplicação?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Flávio Alves Granato flavio.gran...@gmail.com:
 Em 17 de fevereiro de 2012 15:55, Guimarães Faria Corcete DUTRA,
 Leandro l...@dutras.org escreveu:
 2012/2/17 Shander Lyrio shan...@nucleo45.com.br:
 Se ele cadastra o campo em que eu tenho um índice unique o
 sistema avisa da duplicidade, se não não avisa, o risco fica por conta
 do cliente sem que eu o obrigue a fazê-lo

 Isso eu não entendi…

 Sério, como é que você consegue só avisar que o dado esta sendo
 duplicado com um Index Unique?

Acho que ou não entendemos, ou não foi bem explicado…
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 16:42, Flávio Alves Granato escreveu:
 Em 17 de fevereiro de 2012 15:55, Guimarães Faria Corcete DUTRA,
 Leandrol...@dutras.org  escreveu:
 2012/2/17 Shander Lyrioshan...@nucleo45.com.br:
 Se ele cadastra o campo em que eu tenho um índice unique o
 sistema avisa da duplicidade, se não não avisa, o risco fica por conta
 do cliente sem que eu o obrigue a fazê-lo

 Isso eu não entendi…

 Sério, como é que você consegue só avisar que o dado esta sendo
 duplicado com um Index Unique?

Minha chave primária de tabela clientes é artificial. É um 
codigo_cliente do tipo integer. Vários outros atributos estão nesta 
tabela, incluindo cpf, cnpj, estes últimos com índices unique.

Se você tentar inserir um cliente com cpf já cadastrado no sistema ele 
informará erro da mesma forma que seria informado se você tentasse 
incluir um cliente duplicado se o cpf fosse chave primária. Mas, como 
não utilizo o cpf como chave primária, e apenas crio uma restrição de 
unicidade, eu permito ao meu cliente que não utilize este campo se não 
quiser.

No geral, eu não utilizo chaves naturais como chaves primárias, 
simplesmente porque não sou eu quem as controla nem controlo a regra de 
negócio que a forma. Claro que para as chaves naturais triviais como as 
citadas anteriormente, eu as utilizo, mas apenas nestes casos.

Por exemplo, vamos supor que você utilize o login como chave primária, 
como foi sugerido anteriormente nesta thread. Um belo dia, o gerente Sem 
Noção da Silva, resolve que seria ótimo admitir logins repetidos para o 
caso de filiais diferentes da sua empresa, e que isto seria selecionado 
na tela inicial do sistema. Se você utiliza o login como chave primária, 
bem vindo ao inferno! Caso faça da forma com que eu estou propondo, mude 
o índice unique de login para codigo_filial + login e está resolvido o 
seu problema.

Estas chaves normalmente se espalham pelo banco de dados inteiro, então 
eu prefiro ter certeza que a regra de negócio que as gera está sob o meu 
controle.

Abraço,

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 16:42, Flávio Alves Granato escreveu:
 O que vejo, é que o Leandro utiliza chaves primárias para criar suas
 chaves naturais e o Shander não cria chaves primarias ou invés cria
 indices únicos para alguns campos que ele julga necessário. Ou será
 que você deixa tudo por conta da aplicação?

E o que eu vejo é que você está subestimando muito meus conhecimentos e 
minha experiência com Bancos de Dados.

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flávio Alves Granato
Em 17/02/2012 17:43, Shander Lyrio escreveu:
 Em 17/02/2012 16:42, Flávio Alves Granato escreveu:
 O que vejo, é que o Leandro utiliza chaves primárias para criar suas
 chaves naturais e o Shander não cria chaves primarias ou invés cria
 indices únicos para alguns campos que ele julga necessário. Ou será
 que você deixa tudo por conta da aplicação?
   E o que eu vejo é que você está subestimando muito meus conhecimentos e
 minha experiência com Bancos de Dados.

Ainda acho que você não é o centro do universo, me desculpe por esta 
heresia. Assim como discordo com o Leandro discordo de você.
Se é difícil responder uma pergunta, eu sei que é muito mais fácil 
deixar de começar um flame...
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Shander Lyrio
Em 17/02/2012 18:00, Flávio Alves Granato escreveu:
 Ainda acho que você não é o centro do universo, me desculpe por esta
 heresia. Assim como discordo com o Leandro discordo de você.
 Se é difícil responder uma pergunta, eu sei que é muito mais fácil
 deixar de começar um flame...

A pergunta foi respondida antes. Esta parte do seu e-mail recebeu uma 
resposta separada, em segundo momento. Engraçado perceber que você 
preferiu responder esta em detrimento à aquela. Não parece ser tão mais 
fácil deixar de começar um flame, certo?

Vamos deixar este galho morrer e voltar para os argumentos.

Abraço,

--
Shander Lyrio
http://about.me/shander
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flávio Alves Granato

Em 17/02/2012 18:14, Shander Lyrio escreveu:
 Em 17/02/2012 18:00, Flávio Alves Granato escreveu:
 Ainda acho que você não é o centro do universo, me desculpe por esta
 heresia. Assim como discordo com o Leandro discordo de você.
 Se é difícil responder uma pergunta, eu sei que é muito mais fácil
 deixar de começar um flame...
   A pergunta foi respondida antes. Esta parte do seu e-mail recebeu uma
 resposta separada, em segundo momento. Engraçado perceber que você
 preferiu responder esta em detrimento à aquela. Não parece ser tão mais
 fácil deixar de começar um flame, certo?

Pelo outro email ter respondido minha pergunta, continuo achando que não 
deveria responder.
Agora, esta última resposta sua, falando do seu conhecimento, acho ainda 
que não era necessário.

Qual motivo eu teria para dúvidar do conhecimento de alguém? Agora, você 
ainda acha isso, me parece muito mais
um problema seu que meu.


   Vamos deixar este galho morrer e voltar para os argumentos.

Apesar de não concordar com seus argumentos e preferi não dizer em 
resposta à sua primeira resposta, aceito seus argumentos.
Pois, me soa muito como gambiarra do que com modelagem. A justificativa 
disso é, vamos fazer o que o cliente pede já que é ele que me paga, 
esqueça todo o resto, ( estou generalizando em todo o resto ). E 
quando isso ocorre, em futuros próximos a este ocorrido, normalmente tem 
que se dar muita volta para fazer pouca coisa...

Não precisa responder, deixe a thread morrer.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2012/2/17 Shander Lyrio shan...@nucleo45.com.br:

        Modelar é oque? procurar chave natural que não existe ou

Não existe inexistência de chave natural.


 quando existe
 escolher uma que provavelmente vai te dar dor de cabeça daqui a pouco?

Chave natural é analgésico, não cefaléia.


 Se é possível fazer o que o cliente pede sem dor, porque eu iria
 preferir não fazer?

Minha experiência com informação incompleta é que ela sempre volta
para te pegar como assombração à meia noite, no melhor do melhor dos
sonhos…


        Fato é que da forma que vocês propõem, se o documento único que o
 governo está propondo vingar, quem tem identidade como chave primária de
 suas aplicações vai ter um grande problema

Não vejo como.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Flavio Henrique Araque Gurgel
        Fato é que da forma que vocês propõem, se o documento único que o
 governo está propondo vingar, quem tem identidade como chave primária de
 suas aplicações vai ter um grande problema

Senhores, o Cadastro Único que gerou vários spams quando surgiu quando
Lula era presidente (e foi apelidado nos spams de CU) na verdade se
chama CadUnico (provavelmente pra evitar a sigla maldita) e não tem
nada a ver com recadastrar todos os brasileiros.

Ele é direcionado ao apoio do Bolsa Família e cadastro das famílias
abaixo da linha de pobreza:
http://www1.caixa.gov.br/gov/gov_social/municipal/distribuicao_servicos_cidadao/cadastramento_unico/index.asp

Por enquanto, a melhor chave natural para brasileiros e estrangeiros
legalizados é o CPF (embora tenha seus problemas). Até crianças
pequenas tem CPF se os pais decidirem, por exemplo, abrir uma
poupança, o que tive de fazer com meu filho.

Outros exemplos de chaves naturais seriam código de um cartório, livro
e folha do registro de nascidos vivos. Complicado, né? Alguém já
decorou o seu? Ih, quando casamos, passa a ser o código do cartótio,
livro, folha do registro de estado civil e sexo do cônjuge (pra
separar naturalmente os membros de um casa). Aí ferrou de vez... pode
piorar quando a união homoafetiva for registrada dessa forma, aí, não
terá como, teríamos uma chave artificial já no cartório: o integrante
número 1 e o de número 2 da família.

Exemplos de outras chaves naturais para seres humanos:
- alguma forma de representar em código a impressão digital;
- idéia similar para o fundo do olho;
- sequência de DNA.

Em alguns países como a França, o equivalente ao RG brasileiro, por
exemplo, não é obrigatório.

Acho que esta thread é um recorde de postagens nesta lista. Pelo menos
recorde num único dia. Mais de 50 mensagens!

[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Chave Primaria em VARCHAR

2012-02-17 Por tôpico Leandro Guimarães Faria Corcete DUTRA
Le 2012-F-17  22h14, Flavio Henrique Araque Gurgel a écrit :
 Em alguns países como a França, o equivalente ao RG brasileiro, por
 exemplo, não é obrigatório

Claro, a França não foi ditadura.  Isso é resquício da ditadura Vargas, 
para controlar os dissidentes, quando não eram exilados ou assassinados 
de vez.



-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 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