Tenho duas tabelas, "produto" e "estoque". Em "produto" a PK é "código"; há
também um par de campos (cod_base, quantidade) onde "cod_base" é uma FK
auto-referenciada. Este par serve para as embalagens: o produto 1234 pode
ser uma embalagem com 12 unidades do produto 1231 por exemplo. As unidades
(UN, CX, PCT, etc) são tratadas de acordo.

Na tabela "estoque" há um campo "código_fk" que é FK de produto. Somente
produtos-base (isto é, com NULL em "cod_base") podem ter registros em
"estoque". No entanto, às vezes um produto deixa de ser base e passa a ser
embalagem*, deixando registros "sobrando" na tabela "estoque"; tenho que
controlar isso via aplicação mas gostaria de usar o SGBD para garantir esta
integridade de forma mais efetiva.

Segundo sugestão do IRC, tentei criar uma coluna extra em "estoque", deixada
sempre em NULL, criando uma nova FK em "estoque" usando os dois campos de
"produto" (cod_produto e cod_base). Consegui criar esta constraint mas ela
não funcionou: valores inválidos ainda puderam ser inseridos.

* Exemplo: um blister com 4 pilhas é vendido como "base" e vem numa
embalagem com 50 blisters. Um dia o fabricante resolve fazer blisters com 2
pilhas -- ou o lojista resolve abrir os blisters e vender as pilhas
individualmente.

-- 
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade não é defeito.
Moderação na busca por justiça não é virtude."
-- Barry Goldwater
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a