2017-04-25 135 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