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
