2015-02-04 12:50 GMT-02:00 Matheus Saraiva <[email protected]>:

> Um campo 'x' da tabela 'A' pode se relacionar tanto com o campo 'x' da
> tabela 'B' quanto com o campo 'x' da tabela 'C'.
> Sei que dá para criar duas chaves separadas na tabela 'A' uma que
> relaciona A(x)=>B(x) e outra que relaciona A(x)=>C(x). Mas na hora de
> incluir, alterar? Isso daria certo? Tipo digamos que na tabela 'C'
> exista dados gravados mas a tabela 'B' esteja vazia. Daria erro na hora
> de inserir dados em 'A'? Ou seja, o erro que informa que o valor
> informado em A(x) não existe em B(x)?
>

Não, não dá certo.

O que você tem que fazer é, na tabela A criar dois campos, vamos dizer B_x
e C_x. Daí quando o relacionamento for de A=>B o campo B_x recebe o valor
enquanto o C_x fica com valor NULL (quando um campo é NULL a FK não é
verificada), e vice-versa para A=>C.

Caso você precise forçar que apenas ou um outro esteja no relacionamento,
você pode usar uma CHECK CONSTRAINT. Por exemplo, para forçar *exatamente*
um ter relacionamento você pode usar: CHECK(B_x IS NULL <> C_x IS NULL).

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a