Usuário com melhor resposta
Allow Nulls em atributo FK

Pergunta
-
Caros Colegas, peço orientação.
Minha Tabela de Produto tem um atributo do tipo FK ( idFabricante ), no processo de cadastro de um produto, não posso obrigar o usuário a cadastrar o fabricante, pois nem todos os produtos terá um Fabricante.
Ai minha questão.
Seria uma prática ruim eu colocar este atributo como Allow Nulls = True? Permitindo assim de maneira fácil que este id ficasse como NULL?
Quais as implicações disto?
Muito Obrigado
Respostas
Todas as Respostas
-
-
Benê,
Eu não aconselho a utilizar este tipo de prática, desta forma, você estará eliminando a integridade referencial entre primary key com foreign key.
No você destacou que não é obrigatório o cadastro do fabricante, neste caso, você poderia criar um default constraint, e especificar um valor como por exemplo 0 ou 999999, ou seja, analise a melhor forma. Quando não é preenchido o SQL Server vai substituir pelo valor especificado na constraint.
Com isso fica mais fácil de saber quais são os produtos que não possuem fabricante especificado.
-
Só uma quetão!
O que irá acontecer quando ou criar uma QUERY usando INNER JOIN ou LEFT JOIN onde o relacionamento seja o idFornecedor, sabendo que alguns registros da tabela de Produtos estarão com este atributo = 0
Tipo
SELECT
Produto.id, Produto.DescProd, Produto.idFornecedor, Fornecedor.NomeFornecedor
FROM
Produtos
LEFT JOIND Produtos.idFornecedor ON Fornecedor.id
Obrigado
-
Colegas
Fiz um teste baseado nas informações das Theads acima
Não e possível que eu coloque o idFornecedor = 0 na Tabela de Produtos, pois na Tabela de Fornecedores não existe nenhum id = 0, isto gerá uma menssagem de conflito.
Agradeço qualquer orientação
Obrigado
-
Olá Benê,
Neste caso todos dados vindos da tabela mais a esquerda (LEFT JOIN) serão retornados mesmo não tendo correspondência na tabela mais a direita (Fornecedor). E para aqueles registro sem correspondência, os dados virão como nulos da tabela mais a direita, no seu caso, o NomeFornecedor.
Abraço
-
-
-