none
Allow Nulls em atributo FK RRS feed

  • 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

    quinta-feira, 21 de junho de 2007 18:15

Respostas

  •  

    Não, sempre que for informado algum valor, este deverá existir, a menos que você desative a verificação para INSERT e UPDATE, mas aí estará perdendo todo sentido de se usar as FKs.

     

     

    Abraço

    quinta-feira, 21 de junho de 2007 20:32

Todas as Respostas

  •  

     muito ruiim se for um inteiro altere para 0 como valor default.

     

    Abs.

    quinta-feira, 21 de junho de 2007 18:35
  • 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.

    quinta-feira, 21 de junho de 2007 18:41
  • 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

    quinta-feira, 21 de junho de 2007 19:06
  • 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

    quinta-feira, 21 de junho de 2007 19:57
  •  

    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

    quinta-feira, 21 de junho de 2007 20:00
  •  

    Benê,

     

    Esse caso do Id = 0, você poderia cadastrar um fornecedor "Não informado"  ou algo do tipo com id = 0 para permitir que o relacionamento seja mantido e então usar este como o valor default.

     

     

    Abraço

    quinta-feira, 21 de junho de 2007 20:03
  • Colega

     

    Existe alguma maneira de se colocar em um Atributo do tipo FK 0, mesmo que este registro não exista em sua respectiva Tabela?

     

    Obrigado

    Bene

    quinta-feira, 21 de junho de 2007 20:11
  •  

    Não, sempre que for informado algum valor, este deverá existir, a menos que você desative a verificação para INSERT e UPDATE, mas aí estará perdendo todo sentido de se usar as FKs.

     

     

    Abraço

    quinta-feira, 21 de junho de 2007 20:32