2015-02-20 10:34 GMT-02:00 Leandro Guimarães Faria Corcete DUTRA <
l...@dutras.org>:

> Le 19 février 2015 22:27:07 GMT-02:00, Everton Berz <
> everton.b...@gmail.com> a écrit :
> >Sua modelagem está confusa.
>
> Em quê?
>
>
Principalmente nas FK's que eu e o resto do pessoal já citou.


>
> >Existem outros jeitos de resolver, mas não quer optar por usar chaves
> >artificiais?
>
> Pelo contrário, ele só usou chaves artificiais, e dentro desse conceito
> adequadamente.  O problema é que o conceito de chaves artificiais é
> insuficiente: nunca pode substituir completamente a declaração de ao menos
> uma chave natural.
>

Sim, ele só usou chaves artificiais, mas não da maneira típica de criar
PK's pra cada uma.


>
>
> >Se eu entendi teu problema, acredito que a modelagem abaixo resolva.
>
> Pode até resolver o problema que ele colocou (não analisei isso), mas
> quanto à declaração de chaves primárias o teu está muito pior que o dele.
> Não faz sentido criar uma chave artificial para substituir uma chave
> composta de chaves estrangeiras: o modelo engorda, fica mais difícil de
> entender, e por isso mesmo mais difícil de manter a integridade com o tempo
> e a evolução do sistema.
>
>
Desculpe, só estou seguindo o que muitas literaturas dizem.
O teu "fica mais difícil de entender" pra uns é diferente pra outros.
Onde fica mais difícil de manter a integridade? Cite exemplos e provas. Não
precisa, essa discussão iria muito longe e teríamos que abrir outra thread.

"Some people will tell you that you should always use natural keys and
others will tell you that you should always use surrogate keys. These
people invariably prove to be wrong, typically they're doing little more
than sharing the prejudices of their "data religion" with you. The reality
is that natural and surrogate keys each have their advantages and
disadvantages, and that no strategy is perfect for all situations. In other
words, you need to know what you're doing if you want to get it right." --
http://www.agiledata.org/essays/keys.html



>
> >CREATE TABLE pedidos (
> > idpedido serial PRIMARY KEY,
> > idcliente integer CONSTRAINT fk_pedido_cliente REFERENCES clientes
> >(idcliente),
> > datapedido date default now(),
> > situacao varchar(1)
> > );
> >
> >CREATE TABLE peditens (
> >idpeditens serial primary key,
> > idpedido integer CONSTRAINT fk_pedido REFERENCES pedidos (idpedido) ON
> >DELETE CASCADE,
> >idproduto integer CONSTRAINT fk_produto REFERENCES produtos
> >(idproduto),
> > qtde_item integer default 0
> > );
>
> Por exemplo, neste caso cada pedido pode conter infinitos (idpedido,
> idproduto) iguais.  Inconsistência potencial óbvia.
>
>
> >CREATE TABLE pedpecas (
> >idpedpecas serial primary key,
> >idpeditens integer CONSTRAINT fk_peditens REFERENCES peditens
> >(idpeditens)
> >ON DELETE CASCADE,
> > idpecas integer CONSTRAINT fk_pecas REFERENCES pecas (idpecas),
> > qtde_pecas integer default 0
> > );
>
> Analogamente, aqui cada pedpecas pode conter infinitos (peditens, pecas)
> iguais.
>
> Agora compare com o modelo original, onde essas inconsistências, salvo
> engano meu, são impossíveis:
>
>
Isso resolveria facilmente criando uma unique key, ou eu esqueci ou só quis
deixar para o OP entender sozinho isso.



> >2015-02-19 21:58 GMT-02:00 Paulo Afonso Pereira <
> >pa...@visualpsistemas.com.br>:
> >
> >> CREATE TABLE pedidos (
> >>  idpedido serial PRIMARY KEY,
> >>  idcliente integer CONSTRAINT fk_pedido_cliente REFERENCES clientes
> >> (idcliente),
> >>  datapedido date default now(),
> >>  situacao varchar(1)
> >>  );
> >>
> >> CREATE TABLE peditens (
> >>  idpedido integer CONSTRAINT fk_pedido REFERENCES pedidos (idpedido)
> >ON
> >> DELETE CASCADE,
> >>  idproduto integer CONSTRAINT fk_produto REFERENCES produtos
> >(idproduto),
> >>  qtde_item integer default 0,
> >>  CONSTRAINT pk_peditens PRIMARY KEY (idpedido,idproduto)
> >>  );
> >>
> >> CREATE TABLE pedpecas (
> >>  idpedido integer CONSTRAINT fk_pedido REFERENCES pedidos (idpedido)
> >ON
> >> DELETE CASCADE,
> >>  idproduto integer CONSTRAINT fk_produto REFERENCES peditens
> >> (idpedido,idproduto) ON DELETE CASCADE, (**AQUI**)
> >>  idpecas integer CONSTRAINT fk_pecas REFERENCES pecas (idpecas),
> >>  qtde_pecas integer default 0,
> >>  CONSTRAINT pk_pedpecas PRIMARY KEY (idpedido,idproduto,idpecas)
> >>  );
>
> Paulo, para facilitar nossa compreensão, você pode dar um exemplo de
> sessão SQL ilustrando o problema que quer evitar?
>
> Obrigado.
>
>
>
> --
> 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