我正在创建一个 MySQL 数据库。我有一个名为产品名称的列。该产品有一个主要类别。然而,它可以属于n个子类别。我需要将这些子类别映射到该产品。我怎样才能做到这一点?
表1 - 产品信息
列 - ID
、名称
、MainCategory
、SubCategory(不确定)
表2 - MainCategory
列 - ID
、名称
表3 - 子类别
列 - ID
、名称
表 1 与表 2 具有 1 对 1 的关系。 如何将表1映射到表3?我这样做错了吗?
想法:我想这样做,以便每当我单击网站上的任何子类别名称时,我都会得到该类别下所有产品的列表。就像在线商店网站中发生的情况一样。
示例:外部硬盘驱动器产品将属于计算机配件。但我想为其指定子类别,例如 offer_running、500GB、SomeCompanyName、black 等。
希望我解释了我的问题。请帮助我设计数据库。我已经掌握了 DBMS 的所有基础知识,但我不知道如何涉及关键字以及如何在数据库中存储和映射它们。
最佳答案
下面的结构怎么样:
表1 - 产品信息
列 - ID
、名称
、Main_Category_ID
表2 - 类别
列 - ID
、名称
表3 - Product_Category
列 - ID
、Product_ID
、Category_ID
、名称
然后您可以使用以下查询来获取所有信息:
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
关于mysql - 如何将子类别与数据库中的字段关联起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121238/