2017-04-25 94 views
0

我有一个关于如何设计多个类别和多个子类别的问题。商店将有多个类别和多个子类别。数据库设计 - 多个类别和多个子类别

例如,商店将有女装,男装为类别,并有配件和底部,子类

如果它的事项,我使用SQL Server 2016这是我到目前为止的表:

TABLE Store 
    StoreID INT 
    Description NVARCHAR(500) 

TABLE Category 
    CategoryID INT 
    Description NVARCHAR(500) 

TABLE Subcategory 
    SubcategoryID INT 
    CategoryID INT 
    Description NVARCHAR(500) 
+0

如果什么子类别有子类别?您可以/应该将类别和子类别视为同一件事。 – Jerrad

+0

@Jerrad - 不,只是类别和子类别。子类别不会有子类别。 – alvin

+0

每个商店是否可以有不同的类别和子类别?商店1可以有猫(A)和(A1,A2)的Sub,而商店2可以有猫(A)和子(A1,A3)[注意同一只猫的不同潜艇]和猫(B)与(B1,B2 ?)如果是这样,我看到商店; storeCategory与列[StoreID,CatID,SubCatID]和FK到cat和SubCat表。或者只有两张桌子猫和两张桌子的fk到同一张桌子两次。和表中的parentID;允许N维,但现在您必须使用递归查询或forxml路径。 – xQbert

回答

1

只需创建另一个表StoreCategories,将保持STOREID和类别ID允许每个商店都有多个类别,并且每个类别有多个商店。

确保各个表的外键正确放置。 UML Stores/Categories 如果可以在多个类别上使用子类别,则可以放置另一个中间表。
显然要避免双SubCategories。

+0

这个设计是否也允许该类别有多个子类别? – alvin

+0

它的确,每个子类别都有一个类别。因此,链接到一个类别的所有SubCategories的总和就是多重性。 – Hybris95

+0

好的,也许我指的是错误地与多个,但每个类别也将有多个子类别。男士服装分类将有子类别(鞋类,配件,领带)和女装类别也将有子类别(鞋类,配件) – alvin

0

我不认为有单独的类别和子类别表有任何价值。只需要一个单独的分类表,其中可填入ParentCategory列。

TABLE Category  
    CategoryID INT 
    ParentCategory INT 
    Description NVARCHAR(500) 

你的顶级类别将与null为ParentCategory的人。

你说现在不会有多层次的子类别,但是像这样的需求往往会有变化的趋势。如果你确实需要在某个时候需要子子类,那么你不必用这样的设计来重写一堆查询。

然后,你将需要一个表来存储类别商店:

TABLE StoreCategory 
    StoreID INT 
    CategoryID INT 
+0

有一个,如果你不希望SubCategories直接链接到商店,但只能通过类别链接。 – Hybris95

+0

这可以使用触发器强制执行。 – Jerrad

+0

是的,但触发器是性能消耗,但我承认你的电话是好的,它会减少你对设计的技术债务。 – Hybris95