Re: [pgbr-geral] not null if
Em 19 de janeiro de 2017 19:42, Leandro Guimarães Faria Corcete DUTRAescreveu: > 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
Le jeu. 19 janv. 2017 à 18:45, Alexsandro Haaga é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
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 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
Em 19 de janeiro de 2017 17:26, Guimarães Faria Corcete DUTRA, Leandroescreveu: > 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 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
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 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()
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()
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()
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
Em 19 de janeiro de 2017 13:15, Guimarães Faria Corcete DUTRA, Leandroescreveu: > 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
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
Obrigado Tiago, funcionou perfeitamente ! Em 19 de janeiro de 2017 12:58, Tiago José Adamiescreveu: > 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 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
Em 19 de janeiro de 2017 10:55, Rafael Sousaescreveu: > > é 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 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
é 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