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