Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Tiago José Adami
Em 19 de janeiro de 2017 19:42, Leandro Guimarães Faria Corcete DUTRA
 escreveu:
> Le jeu. 19 janv. 2017 à 18:45, Alexsandro Haag  a
>
> Sim, esse era meu ponto.  Não entendi, Alexsandro, o que o colega não havia
> entendido.  Mas tudo bem, toquemos o barco…

Eu me expressei mal e expliquei pouco, imaginei outras possíveis
regras de validação que poderiam surgir com o modelo inalterado, mas
faltou a consciência imediata de que para normalizar é preciso alterar
o modelo.

Agora com mais tempo, revendo a questão e com o exemplo do colega
Alexsandro, ficou mais claro ainda. Faltou-me a capacidade de imaginar
um modelo de ER sem saber para quê servem os atributos.

Como disse o Dutra, toquemos o barco, e esqueçamos o ocorrido.

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

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Leandro Guimarães Faria Corcete DUTRA
Le jeu. 19 janv. 2017 à 18:45, Alexsandro Haag 
 a écrit :

Em 19/01/2017 18:15, Guimarães Faria Corcete DUTRA, Leandro escreveu:
Acredito não ser um problema de entendimento das formas normais, a 
sua
primeira resposta ao OP deu a entender que apenas com a 
normalização o

problema descrito seria resolvido sem a necessidade de implementar
regras adicionais. Agora está claro. Agradeço pela atenção.

Acho que agora eu quem boiei, mas toquemos o barco!
É que para a questão levantada, a solução por normalização 
permitiria deixar o campo sempre "not null", pois estaria em uma 
tabela que seria preenchida apenas se a o campo da outra tabela fosse 
marcado. Assim o modelo de dados estaria bem definido, sem 
necessidade de constraint adicional, mas apenas regra de negócio da 
aplicação.


Sim, esse era meu ponto.  Não entendi, Alexsandro, o que o colega não 
havia entendido.  Mas tudo bem, toquemos o barco…




--
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61)  3546 7191 gTalk: xmpp:leand...@jabber.org
+55 (61) 99302 2691   ICQ/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] not null if

2017-01-19 Por tôpico Alexsandro Haag

Em 19/01/2017 18:15, Guimarães Faria Corcete DUTRA, Leandro escreveu:

Acredito não ser um problema de entendimento das formas normais, a sua
primeira resposta ao OP deu a entender que apenas com a normalização o
problema descrito seria resolvido sem a necessidade de implementar
regras adicionais. Agora está claro. Agradeço pela atenção.

Acho que agora eu quem boiei, mas toquemos o barco!
É que para a questão levantada, a solução por normalização permitiria 
deixar o campo sempre "not null", pois estaria em uma tabela que seria 
preenchida apenas se a o campo da outra tabela fosse marcado. Assim o 
modelo de dados estaria bem definido, sem necessidade de constraint 
adicional, mas apenas regra de negócio da aplicação.


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

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2017-01-19 18:09 GMT-02:00 Tiago José Adami :
>
> Acredito não ser um problema de entendimento das formas normais, a sua
> primeira resposta ao OP deu a entender que apenas com a normalização o
> problema descrito seria resolvido sem a necessidade de implementar
> regras adicionais. Agora está claro. Agradeço pela atenção.

Acho que agora eu quem boiei, mas toquemos o barco!


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/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] not null if

2017-01-19 Por tôpico Tiago José Adami
Em 19 de janeiro de 2017 17:26, Guimarães Faria Corcete DUTRA, Leandro
 escreveu:
> 2017-01-19 16:07 GMT-02:00 Tiago José Adami :
>>
>> Apesar do OP ter satisfeito sua necessidade, vou insistir nesta
>> questão. Não consegui visualizar como 'obrigar' através de uma tabela
>> complementar o valor em um atributo ser not null
>
> Talvez não tenhamos sido suficientemente claros.  A idéia não é criar
> uma tabela complementar, mas normalizar; em outros termos, pegar uma
> situação em que (aparementemente) há mais de uma entidade ‘misturada’
> (representada) por uma única relação, e transformá-la em duas (ou
> mais) relações, eliminando a possibilidade de anomalias de
> atualização.

Aqui foram apenas exemplos do que poderia ser feito, entendi o que o
Alexsandro quis expor.

> A tua pergunta dá a entender que você ainda não entendeu bem o que são
> as formas normais e a normalização?  Ou foi só mesmo nossas
> explicações sobre este caso que não foram claras?

Acredito não ser um problema de entendimento das formas normais, a sua
primeira resposta ao OP deu a entender que apenas com a normalização o
problema descrito seria resolvido sem a necessidade de implementar
regras adicionais. Agora está claro. Agradeço pela atenção.


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

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2017-01-19 16:07 GMT-02:00 Tiago José Adami :
>
> Apesar do OP ter satisfeito sua necessidade, vou insistir nesta
> questão. Não consegui visualizar como 'obrigar' através de uma tabela
> complementar o valor em um atributo ser not null

Talvez não tenhamos sido suficientemente claros.  A idéia não é criar
uma tabela complementar, mas normalizar; em outros termos, pegar uma
situação em que (aparementemente) há mais de uma entidade ‘misturada’
(representada) por uma única relação, e transformá-la em duas (ou
mais) relações, eliminando a possibilidade de anomalias de
atualização.

A tua pergunta dá a entender que você ainda não entendeu bem o que são
as formas normais e a normalização?  Ou foi só mesmo nossas
explicações sobre este caso que não foram claras?


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/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] not null if

2017-01-19 Por tôpico Alexsandro Haag

Em 19/01/2017 16:07, Tiago José Adami escreveu:

Ou você quis dizer que usando formas normais seria necessário aplicar
uma regra de negócio escrita em função de banco ou em aplicação?

Isso mesmo Tiago, ainda assim seria necessário a regra de negócio.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Tiago José Adami
 2017-01-19 14:50 GMT-02:00 Alexsandro Haag :
> Em 19/01/2017 13:27, Tiago José Adami escreveu:
>>
>> Fiquei em dúvida: como seria possível resolver este problema com
>> normalização? Em todas as vezes que me deparei com este tipo de
>> situação resolvi com restrições. Poderia dar um exemplo - mesmo que
>> simplório - para compartilhar conosco? Seria de muito valor!
>
> Olá Tiago, creio que separando esta informação em uma tabela complementar,
> que seria alimentada de acordo com a regra de negócio citada.

Olá, Alexsandro!

Apesar do OP ter satisfeito sua necessidade, vou insistir nesta
questão. Não consegui visualizar como 'obrigar' através de uma tabela
complementar o valor em um atributo ser not null (como no exemplo do
OP) caso o valor de outro atributo (ou conjunto e atributos) seja true
(ou qualquer outro valor).

Entendo que é possível criar uma relação de dependência, como por
exemplo, um registro em uma tabela 'filha' deve existir somente se
outro registro existir em uma tabela 'pai', mesmo assim, o banco de
dados não pode obrigar através de uma forma normal que o registro
exista na tabela 'filha' e na tabela 'pai' ao mesmo tempo.

Quero dizer: o registro pode existir na tabela 'pai' mas a tabela
'filha' pode ter 0 registros e sem o uso de outros meios como triggers
ou validações de regras de negócio em funções de banco ou nas
aplicações não é possível validar isso somente por relacionamentos, o
que não permitiria fazer a restrição do OP.

Você consegue dar um exemplo de como resolver a questão do OP no banco
de dados usando formas normais?

Ou você quis dizer que usando formas normais seria necessário aplicar
uma regra de negócio escrita em função de banco ou em aplicação?


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

Re: [pgbr-geral] Função AddDate()

2017-01-19 Por tôpico sistemas
hum...

valeus

Marcelo

From: Jonas Teixeira de Freitas 
Sent: Thursday, January 19, 2017 2:15 PM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Função AddDate()

Podes utilizar interval '1 day' 
Exemplo select current_date + interval '1 day'

Em 19/01/2017 14:10,  escreveu:

  No MySQL temos:
  select adddate(minhadata, interval 1 month) novadata from tabela

  No postgres fiz assim:
  select minhadata- cast('1 month' as interval) novadata from tabela

  É isso mesmo ou existe uma função mais adequada para adicionar um tempo em 
uma data?

  Não quero data+1 porque não são dias fixos, as vezes precisamos adicionar 1 
mes, exemplo

  01/01/2017 + 30 = 31/01/2017
  01/01/2017 + (1 mes) = 01/02/2017


  Marcelo

  ___
  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___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Função AddDate()

2017-01-19 Por tôpico sistemas
No MySQL temos:
select adddate(minhadata, interval 1 month) novadata from tabela

No postgres fiz assim:
select minhadata- cast('1 month' as interval) novadata from tabela

É isso mesmo ou existe uma função mais adequada para adicionar um tempo em uma 
data?

Não quero data+1 porque não são dias fixos, as vezes precisamos adicionar 1 
mes, exemplo

01/01/2017 + 30 = 31/01/2017
01/01/2017 + (1 mes) = 01/02/2017


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

Re: [pgbr-geral] Função AddDate()

2017-01-19 Por tôpico Jonas Teixeira de Freitas
Podes utilizar interval '1 day'
Exemplo select current_date + interval '1 day'

Em 19/01/2017 14:10,  escreveu:

> No MySQL temos:
> select adddate(minhadata, interval 1 month) novadata from tabela
>
> No postgres fiz assim:
> select minhadata- cast('1 month' as interval) novadata from tabela
>
> É isso mesmo ou existe uma função mais adequada para adicionar um tempo em
> uma data?
>
> Não quero data+1 porque não são dias fixos, as vezes precisamos adicionar
> 1 mes, exemplo
>
> 01/01/2017 + 30 = 31/01/2017
> 01/01/2017 + (1 mes) = 01/02/2017
>
>
> Marcelo
>
> ___
> 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] not null if

2017-01-19 Por tôpico Tiago José Adami
Em 19 de janeiro de 2017 13:15, Guimarães Faria Corcete DUTRA, Leandro
 escreveu:
> 2017-01-19 10:55 GMT-02:00 Rafael Sousa :
>> é possivel colocar um not null apenas se outro campo for por exemplo true ?
>
> Sim, por exemplo com gatilhos, mas não seria um erro de normalização?
> Não seria ideal normalizar?

Fiquei em dúvida: como seria possível resolver este problema com
normalização? Em todas as vezes que me deparei com este tipo de
situação resolvi com restrições. Poderia dar um exemplo - mesmo que
simplório - para compartilhar conosco? Seria de muito valor!

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

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Rafael Sousa
Cleiton,

agradeço a atenção.

Em 19 de janeiro de 2017 11:56, Cleiton Luiz Domazak <
cleitondoma...@gmail.com> escreveu:

>
>
> 2017-01-19 10:55 GMT-02:00 Rafael Sousa :
>
>> é possivel colocar um not null apenas se outro campo for por exemplo true
>> ?
>>
>
> Você poderia ser mais claro no exemplo?
>
>>
>>
>>
>> ___
>> 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
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Rafael Sousa
Obrigado Tiago, funcionou perfeitamente !



Em 19 de janeiro de 2017 12:58, Tiago José Adami 
escreveu:

> Em 19 de janeiro de 2017 10:55, Rafael Sousa 
> escreveu:
> >
> > é possivel colocar um not null apenas se outro campo for por exemplo
> true ?
>
> É possível criando um check constraint:
>
> postgres=# create database checks;
> CREATE DATABASE
>
> postgres=# \c checks;
> Você está conectado agora ao banco de dados "checks" como usuário
> "postgres".
>
> checks=# create table public.teste_check(att1a boolean not null
> default false, att2b integer);
> CREATE TABLE
>
> ## Criação da Check Constraint
> checks=# alter table public.teste_check add constraint ck_teste_2b
> check ( case when att1a is true then att2b is not null end  );
> ALTER TABLE
>
> ## Registro válido
> checks=# insert into public.teste_check(att1a, att2b) values(false,null);
> INSERT 0 1
>
> ## Registro inválido, já que attr1a é TRUE, attr2b não pode ser null
> checks=# insert into public.teste_check(att1a, att2b) values(true,null);
> ERROR:  new row for relation "teste_check" violates check constraint
> "ck_teste_2b"
> DETALHE:  Failing row contains (t, null).
>
>
>
> Adami
> ___
> 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] not null if

2017-01-19 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2017-01-19 10:55 GMT-02:00 Rafael Sousa :
> é possivel colocar um not null apenas se outro campo for por exemplo true ?

Sim, por exemplo com gatilhos, mas não seria um erro de normalização?
Não seria ideal normalizar?  De qualquer maneira, a idéia que já deram
de uma restrição de integridade é bem razoável, talvez até ideal.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/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] not null if

2017-01-19 Por tôpico Tiago José Adami
Em 19 de janeiro de 2017 10:55, Rafael Sousa  escreveu:
>
> é possivel colocar um not null apenas se outro campo for por exemplo true ?

É possível criando um check constraint:

postgres=# create database checks;
CREATE DATABASE

postgres=# \c checks;
Você está conectado agora ao banco de dados "checks" como usuário "postgres".

checks=# create table public.teste_check(att1a boolean not null
default false, att2b integer);
CREATE TABLE

## Criação da Check Constraint
checks=# alter table public.teste_check add constraint ck_teste_2b
check ( case when att1a is true then att2b is not null end  );
ALTER TABLE

## Registro válido
checks=# insert into public.teste_check(att1a, att2b) values(false,null);
INSERT 0 1

## Registro inválido, já que attr1a é TRUE, attr2b não pode ser null
checks=# insert into public.teste_check(att1a, att2b) values(true,null);
ERROR:  new row for relation "teste_check" violates check constraint
"ck_teste_2b"
DETALHE:  Failing row contains (t, null).



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

Re: [pgbr-geral] not null if

2017-01-19 Por tôpico Cleiton Luiz Domazak
2017-01-19 10:55 GMT-02:00 Rafael Sousa :

> é possivel colocar um not null apenas se outro campo for por exemplo true ?
>

Você poderia ser mais claro no exemplo?

>
>
>
> ___
> 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

[pgbr-geral] not null if

2017-01-19 Por tôpico Rafael Sousa
é possivel colocar um not null apenas se outro campo for por exemplo true ?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral