2016-08-18 1 views
0

J'ai une liste de produits dont chacun peut appartenir à un produit catégorie.Lors de la modélisation de la relation "Many To One", comment puis-je traiter un enregistrement provenant du côté "Many" n'appartenant à aucun des enregistrements du côté "One"?

je peux faire deux tables:

product(id, product_name, category_id); 
category(id, category_name); 

Certains produits ne sont pas encore définis ou ne catégorie appartiennent à aucune catégorie définie. Comment puis-je faire face à cela?

Je peux rendre null category_id, ou category_name, ou les deux. Ou je peux créer une valeur "not_yet_assigned" dans le cadre de category_name.

Y at-il une bonne solution à cela?

+2

Je créer une catégorie appelée uncategorized. – Peter

+0

Ou simplement autoriser NULL pour category_id? – Naruto

+0

@Naruto, c'était ma situation critique. Je peux NULL 'category_id', mais alors ... pourquoi ne pas créer une catégorie NULL et garder' category_id' non-nullable .. et puis je suis resté coincé – Dennis

Répondre

1

La création du Product.Category_id nullable forcera à utiliser outer joins pour voir tous vos produits avec leur Category.Category_Name, donc j'éviterais cela, et je créerais une Catégorie appelée Uncategorized ou similaire.
Ou peut-être un Uncategorized (qui serait la valeur par défaut) et un Autre pour les produits qui n'appartiennent à aucune autre catégorie.

0

Fondamentalement, je pense que la réponse à votre problème dépend du fait que vous voulez distinguer ou non entre les deux cas:

  1. Un produit appartient à une catégorie divers, ou
  2. Le produit a pas encore catégorisé.

Si la distinction est importante pour votre application, que mon conseil est de créer une catégorie « Miscellaneaous » (ou similaire), et affecter sa id comme clé étrangère à la première série de produits, et laissez nulle pour la produit qui doit encore être catégorisé.

Si la distinction n'est pas significative que vous pouvez laisser la catégorie null, ou définir une catégorie "nulle", je pense qu'il n'y a pas de grande différence entre les deux approches.