3

I have three product types. It will be more later. Also I have product categories. category can't have multiple product type. So, how should I keep the categories.

1.id | parent_id | name

I'll set the product types as the root categories.
For example:

Electronic > computer > laptop 

Electronic's parent id will be 0 and next categories will linked due to that.

  1. id | parent_id | product_type | name

I'll get the electronic from product_type and computer's parent_id will be 0.

which way is better?

4

4 回答 4

1

对于类别:

ID | Name | Parent_ID

(父 ID 用于类别树)

对于产品:

ID | Category_ID | Name | Description | Other

假设类别树就像

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]

然后,如果您想显示来自的所有产品,例如,Printers只需执行递归,从Printers类别及其子类别中获取所有项目。

TL;博士

第一种方法更好

于 2013-04-01T10:14:03.627 回答
1

我建议使用嵌套集设计而不是您当前使用的邻接列表设计。

虽然它确实有效,但如果您遇到性能问题,嵌套集上的单个查询可以产生比邻接列表(需要多次数据库调用)更多的关于类别的信息。

在 mysql 中使用过这篇关于分层数据的文章,过去用于许多应用程序,并且效果很好。

TL;博士:

邻接表

  • 优点:易于实施
  • 缺点:需要递归数据库调用以确定树中的深度和位置等信息。

嵌套集

  • 优点:可以在单个查询中生成您需要的有关数据的大多数信息
  • 缺点:难以实施
于 2014-01-06T15:31:05.097 回答
0

正如您所提到的,您现在有三种产品类型,并且以后可以增加产品类型,您需要一个产品类型表 -

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

2> product_type_name

现在您有类别表,该表将是分层类别数据,并且与 product_type 表具有一对多的关系。(正如您所说的类别不能有多个产品类型)所以您的表设计将像

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.

您可以在此处详细说明任何进一步的要求,以便我们为您提供帮助。

谢谢

于 2013-04-01T10:23:39.623 回答
0

你的数据库看起来像这样吗?

表:product_type

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

如果是这样,为什么你需要一个进一步的表来获得结果?当您需要一个新类别时,只需添加一个新的父级及其子级。

于 2013-04-01T10:14:11.910 回答