2011-03-21 67 views
10

我有一個問題,我將如何設計我的數據庫中的幾張表。我有一個表來跟蹤類別和一個小類:數據庫設計問題 - 類別/子類別

TABLE Category 
    CategoryID INT 
    Description NVARCHAR(500) 

TABLE Subcategory 
    SubcategoryID INT 
    CategoryID INT 
    Description NVARCHAR(500) 

一個類別可能是這樣的電子,其子類別可能是DVD播放器,電視等

我有一個去另一個表引用類別/子類別。是否需要引用SubcategoryID?

TABLE Product 
    SubcategoryID INT -- should this be subcategory? 

有沒有更好的方法來做到這一點,或者這是正確的方式嗎?我不是一個數據庫設計人員。如果有問題,我正在使用SQL Server 2008 R2。

+0

你的方法工作正常,很簡單(簡單的查詢),用於一個特定場景(類別有子類),但不是很可擴展的,如果你有其他需求ents喜歡更深層次的子類別的子級,去單個表添加parent_id – BlackTigerX 2011-03-21 22:36:50

回答

10

您的設計是適當的。我是一名數據庫開發人員,所以我可以理解在一個表中有類別和子類別的傾向,但是您絕對不會錯過KISS。

除非需要極端的表現或無限的層次結構(我猜不是),否則你很好。

如果能夠將多個子類別與產品相關聯是一個必要條件,對於@ Mikael而言,您需要一個像這樣的設置,通過聯接/相交表格Product_SubCategory創建多對多關係:

CREATE TABLE Product (ProductID int, Description nvarchar(100)) 
CREATE TABLE Product_SubCategory (ProductID int, SubCategoryID int) 
CREATE TABLE SubCategory (SubCategoryID int, CategoryID int, Description nvarchar(100)) 
CREATE TABLE Category (CategoryID int, Description nvarchar(100)) 

希望幫助...

埃裏克Tarasoff

+0

明確幫助 – Freelancer 2013-05-21 10:31:49

+0

這是否允許我創建多個子類別? – TransformBinary 2013-12-03 13:22:24

+0

這表示一個產品可以有多個子類別(反之亦然)...但子類別僅與一個類別綁定。 – 2013-12-06 22:40:54

2

如果類別和子類別具有相同的屬性,則將它們摺疊爲一個表格。

如果一個「子」類別可以屬於多個「父」類別,則添加一個鏈接類別,否則添加一個單指向父指針的列。

例如如果您有電子產品>電視,您是否也有娛樂>電視?等

您的其他表應該引用只是CATEGORY_ID(注意 - 不parent_category_id)

心連心

+0

我希望他們是分開的,但我不知道他們需要。至少我需要能夠分別檢索「頂級」類別。 – Dismissile 2011-03-21 22:01:45

+0

在這個方案中,頂級類別被定義爲沒有父類別的所有類別。對我來說似乎是乾淨的設計。 – Martijn 2011-03-21 22:10:27

0

只要子類別從來沒有在不同的類別重複,特別是如果他們有不同的屬性,那麼你提出的方法是好的。

當您添加/編輯產品時,您可能會遇到一個問題,並且您沒有類別字段,即使您可能想要一個控件可供用戶編輯類別。

3

CategoriesSubCategories兩個單獨的表取決於你的情況。

如果你保持它的方式,你僅限於一個Category> Subcategory場景,因爲你不能有SubCategories的SubCategories。

如果您將它們製作成一張表格,則需要一列ParentID。如果一個類別是最頂級的,它將具有0的ParentID。如果你想允許無限子類別foreach子類別,例如, Electronics > Recordable Media, Blueray, 4gb您將需要使用遞歸編程來顯示它們。

1

這取決於您的要求。如果每個產品鏈接到不超過一個子類別,則應在產品中使用子類別標識。沒有必要添加CategoryID。

需要不同模型的其他場景可能是產品可能直接鏈接到類別而不是子類別,或者一個產品可能鏈接到多個子類別或者子類別鏈接到多個類別。

+0

我認爲「類別」級別就像一個超級的級別,沒有產品應該直接與它鏈接,應該總是有一個子類別來鏈接產品。 – NoChance 2017-01-28 10:27:09

3

將標籤附加到產品中而不是類別層次結構中。它更加靈活。

create table product (id, name,...) 
create table tag (id, name, description) 
create table product_tag (product_id, tag_id) 
+0

將產品標籤幫助**第三和第四級別的類別? – stom 2015-10-20 20:49:24