如何将子类别与数据库中的字段关联?

时间:2014-06-09 13:20:59

标签: mysql database mapping e-commerce keyword

我正在创建一个MySQL数据库。我有一个名为产品名称的列。该产品有一个主要类别。但是,它可以属于n个子类别。我需要将这些子类别映射到该产品。我怎么能这样做?

表1 - Product Info
专栏 - IDNameMainCategorySubCategory (Not Sure Exactly)

表2 - MainCategory
专栏 - IDName

表3 - SubCategory
专栏 - IDName

表1与表2具有一对一的关系。 如何将Table1映射到Table3?我做错了吗?

思考:我希望这样做,以便每当我点击网站上的任何子类别名称时,我都会得到该类别下所有产品的列表。就像它发生在网上商店网站一样。

示例:产品外置硬盘将位于计算机配件下。但我想给它子类别,如 offer_running 500GB SomeCompanyName 黑色等。

希望我解释了我的问题。请帮我设计数据库。我已经掌握了DBMS的所有基础知识,但我不知道如何使用关键字和存储&将它们映射到数据库中。

2 个答案:

答案 0 :(得分:0)

以下结构如何:

表1 - Product Info
专栏 - IDNameMain_Category_ID

表2 - Category
专栏 - IDName

表3 - Product_Category
专栏 - IDProduct_IDCategory_IDName

然后,您可以使用以下查询获取所有获取所有信息:

SELECT p.*, c.Name 
FROM [Product Info] p
INNER JOIN Product_Category pc ON p.ID = pc.Product_ID
INNER JOIN Category c ON pc.Category_ID = c.ID

请注意,在Product Info表格中我添加了Main_Category_ID字段。如果你真的需要确定主要类别,那么这将有效:

SELECT p.ID, p.Name, NULL AS MainCat, c.Name AS SubCat
FROM [Product Info] p
INNER JOIN Product_Category pc ON p.ID = pc.Product_ID
INNER JOIN Category c ON pc.Category_ID = c.ID
UNION 
SELECT p.ID, p.Name, c.Name AS MainCat, NULL AS SubCat
FROM [Product Info] p
INNER JOIN Category c ON p.Main_Category_ID = c.ID

答案 1 :(得分:0)

首先,如果表1和表2具有1-1关系,则不需要具有两个单独的表。这将使查询处理更快,并且无需额外的连接。

您能否澄清表3中ID列所指的内容?这是表3的唯一ID还是表1中的ID?

如果是前者,那么您需要将表1的ID列作为表3中的外键。这将解决您的问题。

希望有所帮助。