MySql、可选类别、子类别和产品子类别

MySql、可选类别、子类别和产品子类别,mysql,database,Mysql,Database,假设数据库中有一个成员表。在每个成员添加他们可以创建的产品和他们自己的类别之前,先添加子类别,甚至子类别。他们添加的产品可能只属于一个类别,但另一个可能属于一个子类别。我在想最有效的方法。我知道下面的例子可能不正确,但希望能解释我的想法 Member MemberID Name ----------------------- Member_Category CategoryID, MemberID, CategoryName -------------------------------

假设数据库中有一个成员表。在每个成员添加他们可以创建的产品和他们自己的类别之前,先添加子类别,甚至子类别。他们添加的产品可能只属于一个类别,但另一个可能属于一个子类别。我在想最有效的方法。我知道下面的例子可能不正确,但希望能解释我的想法

Member 
MemberID  Name  
-----------------------
Member_Category
CategoryID, MemberID, CategoryName
------------------------------------
Member_SubCategory
SubCategoryID, CategoryID, SubCategoryName
---------------------------------
Member_SubSubCategory
SubSubCategoryID, SubCategoryID, SubSubCategoryName
----------------------------
Product
ProductID, MemberID, CategoryID, SubCategoryID, SubSubCategoryID, ProductName, Cost

首先,产品应该只有一个“categoryID”列,没有子类

如果产品可以同时处于多个类别中,最好将其放在一个单独的表“products2categies”中,其中包含“productID”和“columnID”列

其次,在数据库中实现树结构有不同的方法。我会给你最简单的答案。 在“categories”表中创建此结构:“categoryID”、“category\u name”和“parentID”列。前两个是自我解释,第三个指向父类。如果这是一个主类别,则将“parentID”设为=0

有关DB中树结构的更多信息,请参见


因此,在分类表中,如果我有一个id为1的葡萄酒条目,然后再创建两个类别,例如红色和白色……它们的父id都是1。此外,由于该表将由许多成员使用,因此列将是CatID MemberID Name ParentID。不太确定如何对其进行编码以添加和获取数据。我想如果你想给用户提供最顶级的父类别,那么你会把所有父ID为0的类别都抽出来,然后找到子类别,找到父ID中包含CatID的字段……听起来对吗?很抱歉继续…但是这意味着所有的猫,子猫…子子猫…都在一个表中。完全在一个表中,产品表中的一个类别列:)而且你在之前的评论中说的在类别表中添加memberID是对的。谢谢你的时间Yasen,你已经非常有帮助了
Member 
MemberID  Name  
-----------------------
Member_Category
CategoryID, MemberID, CategoryName, ParentID
------------------------------------
Product
ProductID, MemberID, CategoryID, ProductName, Cost