[pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Nilson Chagas
Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
nem como procurar isto.


Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo, não
testei mas até onde eu sei indices unicos não permitem duplicar campos
nulos.

Alguém pode me esclarecer isto??

-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico

Twitter: avozdoevangelho
Twitter: matrixspnet

http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
On-Line
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Wellington





Veja se pode lhe ajudar (
http://www.network-theory.co.uk/docs/postgresql/vol1/UniqueConstraints.html
)

Nilson Chagas wrote:
Pessoal, vou fazer uma pergunta, creio eu de pura
ignorancia, mas no sei nem como procurar isto.
  
  
Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo,
no testei mas at onde eu sei indices unicos no permitem duplicar
campos nulos.
  
Algum pode me esclarecer isto??
  
-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite: 
  http://www.avozdoevangelho.com.br
- Pea gratuitamente um curso Bblico
  
Twitter: avozdoevangelho
Twitter: matrixspnet
  
  http://www.amados.com.br
  http://bbnradio.org
- Oua a rdio e faa gratuitamente um Curso Biblico On-Line
  
  
  

___
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] Não repedir dados do campo...

2009-10-21 Por tôpico Tiago Adami
Crie um índice único na sua coluna, incluindo apenas o campo onde os dados
não podem se repetir - ou seja, criar um índice com o comando CREATE UNIQUE
INDEX [1].

[1] http://www.postgresql.org/docs/8.4/static/sql-createindex.html

--
Tiago J. Adami
http://www.adamiworks.com


2009/10/21 Nilson Chagas nilson.chagas.si...@gmail.com

 Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
 nem como procurar isto.


 Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo, não
 testei mas até onde eu sei indices unicos não permitem duplicar campos
 nulos.

 Alguém pode me esclarecer isto??

 --
 []s
 Nilson Chagas - Ubuntu User 25794
 ---
 Visite:
 http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico

 Twitter: avozdoevangelho
 Twitter: matrixspnet

 http://www.amados.com.br
 http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
 On-Line



 ___
 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] Não repedir dados do campo...

2009-10-21 Por tôpico Osvaldo Kussama
2009/10/21 Nilson Chagas nilson.chagas.si...@gmail.com:
 Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
 nem como procurar isto.


 Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo, não
 testei mas até onde eu sei indices unicos não permitem duplicar campos
 nulos.

 Alguém pode me esclarecer isto??



Creio que é possível inserir vários registros que tenham o campo do índice NULL.

bdteste=# CREATE TEMP TABLE foo(x int);
CREATE TABLE
bdteste=# CREATE UNIQUE INDEX id_x ON foo(x);
CREATE INDEX
bdteste=# INSERT INTO foo VALUES (0);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (1);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (1);
ERRO:  duplicar valor da chave viola a restrição de unicidade id_x
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1

bdteste=# \pset null '(null)'
Exibição nula é (null).
bdteste=# SELECT * FROM foo;
   x

  0
  1
 (null)
 (null)
 (null)
(5 registros)

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


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Nilson Chagas
Muito obrigado, vou estar assim que chegar em casa.

2009/10/21 Osvaldo Kussama osvaldo.kuss...@gmail.com

 2009/10/21 Nilson Chagas nilson.chagas.si...@gmail.com:
  Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
  nem como procurar isto.
 
 
  Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo,
 não
  testei mas até onde eu sei indices unicos não permitem duplicar campos
  nulos.
 
  Alguém pode me esclarecer isto??
 


 Creio que é possível inserir vários registros que tenham o campo do índice
 NULL.

 bdteste=# CREATE TEMP TABLE foo(x int);
 CREATE TABLE
 bdteste=# CREATE UNIQUE INDEX id_x ON foo(x);
 CREATE INDEX
 bdteste=# INSERT INTO foo VALUES (0);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (1);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (1);
 ERRO:  duplicar valor da chave viola a restrição de unicidade id_x
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1

 bdteste=# \pset null '(null)'
 Exibição nula é (null).
 bdteste=# SELECT * FROM foo;
   x
 
  0
  1
  (null)
  (null)
  (null)
 (5 registros)

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




-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico

Twitter: avozdoevangelho
Twitter: matrixspnet

http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
On-Line
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Joao Cosme de Oliveira Junior

Só para complementar .Null significa indeterminado ou não se aplica Por exemplo: o caboclo vai preencher um ficha e tem lá : número de gestações : coloque null , porque não se aplica!Em outro caso pode ser indeterminado. Um exemplo bem tosco... em um campo idade:Então null não vai garantir unicidade, porque pode ser qualquer valor indeterminado. Por exemplo um campo null em um registro não tenho como dizer que é igual a um campo null em outro registro, já que são indeterminados!!Loucura Loucura !!!Abraços!!!João Cosme de Oliveira Júnior

Seja inteligente, use Software-livre!!!
LPI Certified
LPI000185554
Em 21/10/2009 às 15:13 horas, pgbr-geral@listas.postgresql.org.br escreveu:Muito obrigado, vou estar assim que chegar em casa.2009/10/21 Osvaldo Kussama osvaldo.kuss...@gmail.com
2009/10/21 Nilson Chagas nilson.chagas.si...@gmail.com:
 Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
 nem como procurar isto.


 Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo, não
 testei mas até onde eu sei indices unicos não permitem duplicar campos
 nulos.

 Alguém pode me esclarecer isto??



Creio que é possível inserir vários registros que tenham o campo do índice NULL.

bdteste=# CREATE TEMP TABLE foo(x int);
CREATE TABLE
bdteste=# CREATE UNIQUE INDEX id_x ON foo(x);
CREATE INDEX
bdteste=# INSERT INTO foo VALUES (0);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (1);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (1);
ERRO: duplicar valor da chave viola a restrição de unicidade "id_x"
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1
bdteste=# INSERT INTO foo VALUES (null);
INSERT 0 1

bdteste=# \pset null '(null)'
Exibição nula é "(null)".
bdteste=# SELECT * FROM foo;
  x

   0
   1
(null)
(null)
(null)
(5 registros)

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
-- []sNilson Chagas - Ubuntu User 25794---Visite: http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico
Twitter: avozdoevangelhoTwitter: matrixspnethttp://www.amados.com.brhttp://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico On-Line






"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional. Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."

"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Leonardo Cezar
2009/10/21 Joao Cosme de Oliveira Junior joao.co...@serpro.gov.br

 Só para complementar .
 Null significa indeterminado ou não se aplica 

Só pra complementar++, ao utilizar NULL você estará assumindo
armazenar valores fora do domínio daquela coluna e portanto não
conseguirá armazenar requisitos sequer para alcançar 1FN
(desconsiderando as controvérsias).

Resultado disso são anomalias (tratamento especial) com agregação,
agrupameto, concatenação, ordenação, *ção.

Devido a falta de tipos nulos (aplicáveis e não-aplicáveis) no
SQL-ANSI torna-se impossível manter um modelo de dados consistente
utilizando atributos que permitam nulos.

De preferência por normalizar essa relação, por exemplo:

PESSOA { #CPF, NOME, PROFISSAO }

O atributo PROFISSAO pode ser Nulo, mas aplicável, então:

PESSOA { #CPF, NOME }-- Tabela de pessoas
PROFISSAO { #CBO, TITULO, TIPO, ATIVO } -- Tabela de profissões
segundo ministério do trabalho;
OCUPACAO {#CPF, #CBO, DESDE, ... }-- Tabela de profissões de uma PESSOA;

De acordo com o modelo acima, o atributo PROFISSAO só seria preenchido
quando uma PESSOA de fato possuir uma ocupação.

Desta forma eliminamos os NULLs da variável de relação PESSOA -
PROFISSAO e obecedemos a 1FN.

Abraço!

-Leo
--
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Andre Fernandes
Muito bom lembrares desse detalhe de modelagem, infelizmente poucos conhecem
os problemas de usar NULL. Ficou bem didático (quem me dera quando estudei
em banco de dados tivessem tido essa didática... Teria sido muito mais
simples :-))!

Abraços

2009/10/21 Leonardo Cezar lhce...@gmail.com

 2009/10/21 Joao Cosme de Oliveira Junior joao.co...@serpro.gov.br
 
  Só para complementar .
  Null significa indeterminado ou não se aplica 

 Só pra complementar++, ao utilizar NULL você estará assumindo
 armazenar valores fora do domínio daquela coluna e portanto não
 conseguirá armazenar requisitos sequer para alcançar 1FN
 (desconsiderando as controvérsias).

 Resultado disso são anomalias (tratamento especial) com agregação,
 agrupameto, concatenação, ordenação, *ção.

 Devido a falta de tipos nulos (aplicáveis e não-aplicáveis) no
 SQL-ANSI torna-se impossível manter um modelo de dados consistente
 utilizando atributos que permitam nulos.

 De preferência por normalizar essa relação, por exemplo:

 PESSOA { #CPF, NOME, PROFISSAO }

 O atributo PROFISSAO pode ser Nulo, mas aplicável, então:

 PESSOA { #CPF, NOME }-- Tabela de pessoas
 PROFISSAO { #CBO, TITULO, TIPO, ATIVO } -- Tabela de profissões
 segundo ministério do trabalho;
 OCUPACAO {#CPF, #CBO, DESDE, ... }-- Tabela de profissões de uma
 PESSOA;

 De acordo com o modelo acima, o atributo PROFISSAO só seria preenchido
 quando uma PESSOA de fato possuir uma ocupação.

 Desta forma eliminamos os NULLs da variável de relação PESSOA -
 PROFISSAO e obecedemos a 1FN.

 Abraço!

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 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] Não repedir dados do campo...

2009-10-21 Por tôpico Nilson Chagas
Puxa nunca pensei que de uma pergunta como esta poderia aprender tanto.


Valew, depois da sua explicação me deu até uma luz de como contornar de tal
forma que não exista campos nulos.


2009/10/21 Leonardo Cezar lhce...@gmail.com

 2009/10/21 Joao Cosme de Oliveira Junior joao.co...@serpro.gov.br
 
  Só para complementar .
  Null significa indeterminado ou não se aplica 

 Só pra complementar++, ao utilizar NULL você estará assumindo
 armazenar valores fora do domínio daquela coluna e portanto não
 conseguirá armazenar requisitos sequer para alcançar 1FN
 (desconsiderando as controvérsias).

 Resultado disso são anomalias (tratamento especial) com agregação,
 agrupameto, concatenação, ordenação, *ção.

 Devido a falta de tipos nulos (aplicáveis e não-aplicáveis) no
 SQL-ANSI torna-se impossível manter um modelo de dados consistente
 utilizando atributos que permitam nulos.

 De preferência por normalizar essa relação, por exemplo:

 PESSOA { #CPF, NOME, PROFISSAO }

 O atributo PROFISSAO pode ser Nulo, mas aplicável, então:

 PESSOA { #CPF, NOME }-- Tabela de pessoas
 PROFISSAO { #CBO, TITULO, TIPO, ATIVO } -- Tabela de profissões
 segundo ministério do trabalho;
 OCUPACAO {#CPF, #CBO, DESDE, ... }-- Tabela de profissões de uma
 PESSOA;

 De acordo com o modelo acima, o atributo PROFISSAO só seria preenchido
 quando uma PESSOA de fato possuir uma ocupação.

 Desta forma eliminamos os NULLs da variável de relação PESSOA -
 PROFISSAO e obecedemos a 1FN.

 Abraço!

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico

Twitter: avozdoevangelho
Twitter: matrixspnet

http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
On-Line
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Não repedir dados do campo...

2009-10-21 Por tôpico Osvaldo Kussama
2009/10/21 Joao Cosme de Oliveira Junior joao.co...@serpro.gov.br

 Só para complementar .
 Null significa indeterminado ou não se aplica 

 Por exemplo: o caboclo vai preencher um ficha e tem lá : número de gestações 
 : coloque null , porque não se aplica!
 Em outro caso pode ser indeterminado. Um exemplo bem tosco... em um campo 
 idade:

 Então null não vai garantir unicidade, porque pode ser qualquer valor 
 indeterminado. Por exemplo um campo null em um registro não tenho como dizer 
 que é igual a um campo null em outro registro, já que são indeterminados!!

Só para lembrar:
O PostgreSQL possui a comparação IS [NOT] DISTINCT FROM que trata
NULLs como sendo iguais:

bdteste=# SELECT NULL  IS NOT DISTINCT FROM  NULL;
 ?column?
--
 t
(1 registro)

bdteste=# SELECT NULL  IS DISTINCT FROM  NULL;
 ?column?
--
 f
(1 registro)

ENQUANTO

bdteste=# SELECT NULL = NULL;
 ?column?
--
 (null)
(1 registro)



 Loucura Loucura !!!

 Abraços!!!



 João Cosme de Oliveira Júnior

 Seja inteligente, use Software-livre!!!
 LPI Certified
 LPI000185554


 Em 21/10/2009 às 15:13 horas, pgbr-geral@listas.postgresql.org.br escreveu:

 Muito obrigado, vou estar assim que chegar em casa.

 2009/10/21 Osvaldo Kussama osvaldo.kuss...@gmail.com

 2009/10/21 Nilson Chagas nilson.chagas.si...@gmail.com:
  Pessoal, vou fazer uma pergunta, creio eu de pura ignorancia, mas não sei
  nem como procurar isto.
 
 
  Tenho um campo na tabela que deve ser unico, salvo se ele estiver nulo, não
  testei mas até onde eu sei indices unicos não permitem duplicar campos
  nulos.
 
  Alguém pode me esclarecer isto??
 


 Creio que é possível inserir vários registros que tenham o campo do índice 
 NULL.

 bdteste=# CREATE TEMP TABLE foo(x int);
 CREATE TABLE
 bdteste=# CREATE UNIQUE INDEX id_x ON foo(x);
 CREATE INDEX
 bdteste=# INSERT INTO foo VALUES (0);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (1);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (1);
 ERRO:  duplicar valor da chave viola a restrição de unicidade id_x
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1
 bdteste=# INSERT INTO foo VALUES (null);
 INSERT 0 1

 bdteste=# \pset null '(null)'
 Exibição nula é (null).
 bdteste=# SELECT * FROM foo;
   x
 
      0
      1
  (null)
  (null)
  (null)
 (5 registros)



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