Le mercredi 04 octobre 2017 à 17:36 -0300, Felipe Moura a écrit :
> 
> A ideia é montar uma view usando union que busque pessoas ou unidade
> então ficaria algo assim
> 
> SELECT CODIGO, NOME, 1 as tipo FROM pessoa
> UNION
> SELECT CODIGO, NOME, 2 as tipo FROM unidade

Isso cria uma anomalia que normalmente evitamos em se tratando de
relações armazenadas (base): o significado do atributo código depende
do valor doutro atributo.

        Entretanto, como se trata duma relação derivada (visão), não
vejo maiores problemas.  Enquanto não for usar isso como base para
outras relações, para transações, para operações… para meros relatórios
e consultas, não deve causar nenhuma catástrofe.


> Alguns colegas não acham legal que o campo codigo possa ser tanto
> pessoa quanto unidade e sugeriram que o certo seria algo assim:
> 
> SELECT CODIGO_PESSOA, 0 AS CODIGO_UNIDADE, NOME, 1 as tipo FROM
> pessoa
> UNION
> SELECT 0 AS CODIGO_PESSOA, CODIGO_UNIDADE, NOME, 2 as tipo FROM
> unidade

Você evita o problema apontado acima, já que morre o código genérico;
não sei se vale a pena o trabalho adicional.  Se for base para
transações, por exemplo, seria necessária a clareza adicional, mas de
qualquer maneira misturar dois atributos numa única relação já não
seria recomendável nem como base para outras relações, nem para
operações.

        Resumindo, para meras consultas e relatórios, nenhuma das duas
é muito ruim.


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

Responder a