2013-04-01 7 views
2

J'ai trois types de produits. Ce sera plus tard. J'ai aussi des catégories de produits. La catégorie ne peut pas avoir plusieurs types de produits. Alors, comment dois-je garder les catégories.Meilleure façon de stocker les catégories et le type de produit dans la base de données

1. id | parent_id | name

Je vais définir les types de produits que les catégories racine.
Par exemple:

Electronic > computer > laptop 

id parent electronic sera de 0 et les catégories suivantes seront liées à cause de cela.

  1. id | parent_id | product_type | name

Je vais l'électronique de product_type et de id_parent de l'ordinateur sera 0.

où est le mieux?

Répondre

1

Pour les catégories:

ID | Name | Parent_ID 

(ID parent est pour l'arbre de catégorie)

Pour les produits:

ID | Category_ID | Name | Description | Other 

Disons que l'arbre de la catégorie est comme

Computers [ID: 1 | Parent: 0] 
|-Laptops [ID: 2 | Parent: 1] 
|-Desktop [ID: 3 | Parent: 1] 
|-Printers [ID: 4 | Parent: 1] 
| |-Brand #1 [ID: 5 | Parent: 4] 
| |-Brand #2 [ID: 6 | Parent: 4] 
|-Other stuff [ID: 7 | Parent: 1] 

Alors, Si vous souhaitez afficher tous les produits à partir de, par exemple, Printers, il suffit de faire une récursion obtenir tous les éléments de la catégorie Printers et ses sous-catégories.

TL; DR

La première est meilleure

0

Votre db ressemble à ceci?

table: product_type

id | parent_id | name 
------------------------------- 
1 | null  | Electronics 
------------------------------- 
2 | 1   | Computer 
------------------------------- 
3 | 2   | Laptop 
------------------------------- 

si oui, pourquoi avez-vous besoin d'une autre table pour obtenir le résultat? lorsque vous avez besoin d'une nouvelle catégorie, il suffit d'ajouter un nouveau parent et ses enfants.

0

Comme vous l'avez mentionné que vous avez trois types de produits maintenant et que les types de produits peut être augmentée plus tard, vous avez besoin d'une table pour les types de produits -

Product_type 
------------ 
1> product_type_id - Primary Key 

2> product_type_name 

Maintenant, vous avez table catégories qui sera de catégorie hiérarchique les données et ont relation un à plusieurs de la table product_type. (comme vous le dites catégories ne peuvent pas avoir plusieurs types de produits) Ainsi, la conception de votre table sera comme

Product_categories 
------------------ 

1> product_cat_id - Primary key 

2> product_type_desc 

3> parent_product_type_id (for hierarchical relationship) 

4> product_type_id - foreign key to **Product_type** table. 

vous pouvez élaborer toute autre exigence ici, afin que nous puissions aider toi.

Merci

0

Je vous recommande d'utiliser un ensemble de conception imbriqué plutôt que ce que vous utilisez actuellement, une conception de la liste de contiguïté. Bien que cela fonctionne, si vous rencontrez des problèmes de performances, une seule requête sur un ensemble imbriqué peut produire BEAUCOUP plus d'informations sur la catégorie que sur une liste d'adjacence (qui nécessite plusieurs appels de base de données).

Je l'ai utilisé this article on hierarchical data in mysql, dans le passé pour de nombreuses applications et il fonctionne très bien.

TL; DR:

contiguïté Liste

  • Avantages: Facile à mettre en œuvre
  • Inconvénients: Nécessite appels de base de données récursives afin de déterminer des informations telles que la profondeur, et la position dans l'arbre.

Nested Set

  • Avantages: Peut produire plus d'informations que vous auriez besoin de vos données dans une seule requête
  • Moins: Plus difficile à mettre en œuvre
Questions connexes