在DB中存储类别和产品类型的最佳方式

时间:2013-04-01 10:05:10

标签: database-design

我有三种产品类型。它会更晚。 我也有产品类别。类别不能有多种产品类型。那么,我该如何保留类别。

1。id | parent_id | name

我会将产品类型设置为根类别 例如:

Electronic > computer > laptop 

电子的父ID将为0,下一个类别将因此链接。

  1. id | parent_id | product_type | name
  2. 我将从product_type获取电子邮件,计算机的parent_id将为0。

    哪种方式更好?

4 个答案:

答案 0 :(得分: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; DR

第一种方式更好

答案 1 :(得分:0)

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

表:product_type

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

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

答案 2 :(得分: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.

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

由于

答案 3 :(得分:0)

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

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

我过去曾使用this article on hierarchical data in mysql来处理许多应用程序而且效果非常好。

<强> TL; DR:

邻接列表

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

嵌套集

  • 优点:可以在单个查询中生成有关数据的大部分信息
  • 缺点:难以实施