我正在创建一个MySQL数据库。我有一个名为产品名称的列。该产品有一个主要类别。但是,它可以属于n个子类别。我需要将这些子类别映射到该产品。我怎么能这样做?
表1 - Product Info
专栏 - ID
,Name
,MainCategory
,SubCategory (Not Sure Exactly)
表2 - MainCategory
专栏 - ID
,Name
表3 - SubCategory
专栏 - ID
,Name
表1与表2具有一对一的关系。 如何将Table1映射到Table3?我做错了吗?
思考:我希望这样做,以便每当我点击网站上的任何子类别名称时,我都会得到该类别下所有产品的列表。就像它发生在网上商店网站一样。
示例:产品外置硬盘将位于计算机配件下。但我想给它子类别,如 offer_running , 500GB , SomeCompanyName ,黑色等。
希望我解释了我的问题。请帮我设计数据库。我已经掌握了DBMS的所有基础知识,但我不知道如何使用关键字和存储&将它们映射到数据库中。
答案 0 :(得分:0)
以下结构如何:
表1 - Product Info
专栏 - ID
,Name
,Main_Category_ID
表2 - Category
专栏 - ID
,Name
表3 - Product_Category
专栏 - ID
,Product_ID
,Category_ID
,Name
然后,您可以使用以下查询获取所有获取所有信息:
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中的外键。这将解决您的问题。
希望有所帮助。