2012-07-21 130 views
1

我有一個不同的情況,a category可以是a sub categorymore than one category。我應該如何設計?可以是多個類別的子類別的類別?

下面的樹結構不解決我的問題,我猜。我應該做ParentCategoryId作爲一個字符串,並可以在其中採取多個類別ID。然後做計算來解決父類別,或者你建議我另一種解決方案?解決這個問題的最佳解決方案是什麼?

--Category-- 

Id 
ParentCategoryId 
CategoryName 

由於提前,

回答

2

此標準的SQL的解決方案是一個交叉表。您將有兩個表,類別和categories_x如下:

categories 
+------------+------------+ 
|categoryId |name  | 
+------------+------------+ 
|1   |foo   | 
+------------+------------+ 
|2   |bar   | 
+------------+------------+ 
|3   |huh   | 
+------------+------------+ 

categories_x 
+------------+------------+ 
|categoryId |parentId | 
+------------+------------+ 
|3   |1   | 
+------------+------------+ 
|3   |2   | 
+------------+------------+ 

拿到3類別的父母你的SQL查詢看起來像:

SELECT categoryId, name 
    FROM categories 
    WHERE categoryId IN (SELECT parentId FROM categories_x WHERE categoryId = 3) 
1

除了什麼約翰·克拉克說,這也是一個好主意,有你的東西像所有類別的預先計算表:

Item Direct Categories 
+------------+------------+ 
|itemId  |categoryId | 
+------------+------------+ 
|1   |1   | 
+------------+------------+ 
|3   |2   | 
+------------+------------+ 

然後

Item All Categories 
+------------+------------+ 
|itemId  |categoryId | 
+------------+------------+ 
|1   |1   | 
+------------+------------+ 
|3   |2   | 
+------------+------------+ 

在第一個中,您只會保存項目的類別,但在第二個項目中,您還會將每個項目的類別的超類別關聯起來,因此您可以檢查哪些是單個查詢if一個項目是否有類別。