Não é possível.
Uma FK deve referenciar uma coluna com valor válido, em outra tabela.
É uma restrição de integridade.
Aliás, ao meu ver, se uma tabela possui uma FK que precisa ser “zerada” em determinada situação, é por que o design do banco ficou errado.
Seria como ter uma herança de pessoa, pessoa_fisica e pessoa_juridica, mas, ao invés das tabelas pessoa_fisica e pessoa_juridica terem uma FK para pessoa, o contrário. Entende o que digo?
[quote=pmlm][quote=drsmachado]
Aliás, ao meu ver, se uma tabela possui uma FK que precisa ser “zerada” em determinada situação, é por que o design do banco ficou errado.
[/quote]
Não necessariamente. Uma FK pode simplesmente ser NULL. E isso resolve o problema inicial.[/quote]
Ok, mas o sentido de FK nos leva a acreditar que, se existe a necessidade de ela apontar a uma outra tabela, não faz sentido ser nula, não acha?
Como o caso que citei, da herança de pessoa. Seria inteligente cadastrar um cliente sem especificar qual o tipo de pessoa que ele é?
Uma tabela pode conter um campo opcional, mas que se for preenchido, deve vir de outra tabela.
Por exemplo, você pode ter um campo “Produto favorito” no cadastro de clientes que deve ser preenchido com a FK do produto que ele prefere de sua empresa, mas que pode ser nulo caso o cliente não tenha preferência declarada.
Claro que situações assim são mais exceções do que regra, e há quem prefira dizer que se a opção “Nenhum” existe, ela deveria estar cadastrada na tabela de produtos.
[quote=drsmachado]
Ok, mas o sentido de FK nos leva a acreditar que, se existe a necessidade de ela apontar a uma outra tabela, não faz sentido ser nula, não acha?[/quote]
Qualquer combobox na tua aplicação que não seja obrigatória, vai ser uma FK que pode ser nula na tua BD.