2013-03-08 152 views
0

让我们假设一个数据库有一个成员表。在每个成员添加一个他们可以创建的产品和他们自己的类别之前,然后是一个子类别,甚至是一个子类别。他们添加的产品可能只属于一个类别,但另一个可能属于子类别。我试图想到这样做的最有效的方法。我知道下面的例子可能不正确,但希望解释我的想法是什么。MySql,产品的可选类别,子类别和子子类别

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 

回答

0

首先产品应该只有一个'categoryID'列,没有潜水艇。

如果产品可以同时处于多个类别中,那么最好将其放在单独的'products2categies'与'productID'和'columnID'列中。

其次,在DB中实现树结构有不同的方法。我会为您提供最简单的。 在'类别'表中创建此结构:'categoryID','category_name'和'parentID'列。前两个是自我解释性的,第三个指向父类别。如果这是一个主类,使“的parentID” = 0

更多关于树结构DB看到这个What are the known ways to store a tree structure in a relational DB?

Member 
MemberID Name 
----------------------- 
Member_Category 
CategoryID, MemberID, CategoryName, ParentID 
------------------------------------ 
Product 
ProductID, MemberID, CategoryID, ProductName, Cost 
+0

所以,在类别表,如果我有酒有ID的条目为1,然后创建了两个类别,例如红色和白色......他们的父母ID都是1.同样,由于该表将被许多成员使用,所以这些列将是CatID MemberID Name ParentID。 – simmo 2013-03-08 16:47:45

+0

不太确定这将如何编码添加和获取数据。我想如果你想给用户最高的父类别,那么你会拿出所有那些父母ID为0的,然后找到子邮件找到的字段,其具有CatID的ParentID ....是否听起来有关对?抱歉继续......但这就意味着所有的猫,副猫......副猫......都在一张桌子上。 – simmo 2013-03-08 16:49:27

+0

所有产品都在一个表格中,产品表格中的类别为一列:)而且您在前面的评论中为您在类别表中添加memberID所说的话是正确的。 – 2013-03-08 17:13:40