Foreign key nula[Resolvido]

Boa tarde pessoal do GUJ

Estou usando o MySQL com a engine InnoDB e queria saber se é possível criar uma chave estrangeira nula?

att.

Nenhum tipo de chave pode ser nula, seja uma chave primaria ou estrangeira.

O que acontece é o seguinte, eu tenho um tabela chamada ocorrencia com uma coluna idCliente, que contém o código do cliente que na tabela cliente é chave primária. Mas não é toda ocorrencia que possui um cliente, por isso a necessidade de deixa-la nula.

Mas eu consegui deixar, não sei se não é uma boa prática.

O erro estava na clausula ‘ignore’.

ALTER TABLE ocorrencia
CHANGE idCliente idCliente INTEGER UNSIGNED NULL;

ALTER IGNORE TABLE ocorrencia ADD FOREIGN KEY idCliente REFERENCES cliente(idCliente);

Agradeço.

FALSO
Chave estrangeira pode perfeitamente ser nula.

Ok, mas você já tentou inserir um registro? Você só definiu que o campo pode ser nulo. Só que ao inserir um registro com idCliente nulo ele vai reclamar que não tem um registro correspondente na tabela Cliente.

Fiz a inserção, tá funcionando normalmente.

Creio que o problema só ocorre se o valor da chave estrageira não existir na outra tabela com exceção de um dado nulo.

Não vai reclamar não.

Se o valor é NULL não é feita a validação do registo.

Bom, então errei! Só fica estranho ter uma chave estrangeira, que não aponta para nada!

Estranho?

Imagina que tens um formulário onde tens uma combobox com valores para escolher. E esse campo não é obrigatório de responder. Pode ser, sei lá, o país onde moras.

Na BD vais ter na tabela de pessoa, uma FK para país que vai ficar a NULL.

[quote=pmlm]Estranho?

Imagina que tens um formulário onde tens uma combobox com valores para escolher. E esse campo não é obrigatório de responder. Pode ser, sei lá, o país onde moras.

Na BD vais ter na tabela de pessoa, uma FK para país que vai ficar a NULL. [/quote]

Não uso chaves estrangeiras para esse tipo de caso, pois na consulta teria que ser feito um Join, para uma informação que poderia ficar na tabela. Claro que isso aumenta o tamanho da minha tabela, mas melhora o desempenho da consulta.

Uso chaves estrangeiras somente onde realmente necessito de uma referencia externa. Por isso acho estranho, não que não seja válido.

Pronto, eu arranjo outro exemplo :slight_smile:

Tabela de Funcionarios de uma empresa, onde tem uma FK para a própria tabela, indicando o chefe do funcionário. O chefe da empresa não vai ter nenhum chefe, vai ter essa FK a null.

[quote=pmlm]Pronto, eu arranjo outro exemplo :slight_smile:

Tabela de Funcionarios de uma empresa, onde tem uma FK para a própria tabela, indicando o chefe do funcionário. O chefe da empresa não vai ter nenhum chefe, vai ter essa FK a null.[/quote]

O exemplo é valido, mas nesses sasos utilizo uma tabela auxiliar até porque alguns bancos não permitem join na mesma tabela ao realizar uma consulta

[quote=pmlm]Estranho?

Imagina que tens um formulário onde tens uma combobox com valores para escolher. E esse campo não é obrigatório de responder. Pode ser, sei lá, o país onde moras.

Na BD vais ter na tabela de pessoa, uma FK para país que vai ficar a NULL. [/quote]

Exxxxaaatamente o que eu buscava saber.
Tenho uma combobox “sexo” da pessoa, não é obrigatória.
E é salvo na tabela pessoa, ligado por chave estrangeira a tabela sexo.
Então agora sei que posso mudar pra aceitar nulo!

Valeu! Ajudou no TCC xD

1 curtida

[quote=TJChagas]
Exxxxaaatamente o que eu buscava saber.
Tenho uma combobox “sexo” da pessoa, não é obrigatória.
E é salvo na tabela pessoa, ligado por chave estrangeira a tabela sexo.
Então agora sei que posso mudar pra aceitar nulo!

Valeu! Ajudou no TCC xD[/quote]

Olha, acho que você tem um problema no seu modelo de dados. O sexo das pessoas não deveria ter uma tabela, isso criaria um sério problema de desempenho. Imagina que para cada consulta você teria que fazer um join somente para buscar essa informação.