2009-04-08 19 views
3

他們是否有所有類別的表格和所有子類別的另一個表格(以及另一個子類別的表格),還是什麼?所有級別如何與周圍的人交流?什麼是最好的方式來設計像Yelp或eBay(很多類別和子類別)網站的數據庫和關係?

我是一個菜鳥入門上可能有複雜的該級別一個項目,我有一個硬包時我的頭周圍。

我與Rails的工作,但我也很感激數據庫架構的答案,指向進一步閱讀等

回答

4

我假設你在這裏處理分層數據。

你只需要兩個表。其中一個表格用於類別之間的類別和關係。例如:

CategoryID CategoryName ParentCategoryID 
---------------------------------------- 
1   Computers NULL 
2   Programming 1 
3   Games  1 
4   Python  2 

另一個表用於存儲與類別關聯的數據。例如:

CategoryID ItemID Description 
---------------------------------------------- 
4   1  Book – Programming in Python 
3   1  World of Warcraft 

第一個表中包含的子類別鏈接到它們的父類的外鍵列。這被稱爲「鄰接列表模型」。這個模型的好處是簡單易懂,並且可以用客戶端代碼很容易地完成這個模型的各種事情(例如,檢索Python類的路徑 -/Computers/Programming/Python)(如果你不請注意性能成本,因爲您可能需要對數據庫進行多次查詢)。但是,如果您嘗試在完整的SQL中執行此操作,則可能會引起注意。例如,檢索類別的路徑將需要自連接。

結構的另一種方式該表是考慮的類別和子類別的集合和子集(被稱爲「嵌套集模型」)的。沒有圖表很難解釋這個模型,文章Managing Hierarchical Data in MySQL似乎在解釋概念(「鄰接列表」和「嵌套集合」模型)方面做得更好。

+0

您的解決方案看起來像工作量最少的可擴展性最高(無需繼續創建表)。嵌套集模型絕對華麗,我發現我認爲一個Rails插件可以更容易地使用它們。謝謝! – 2009-04-08 18:13:51

1

我的建議是使用單獨的表制定的,但是,可以子類別的」問題存在於多個類別「也會改變結果。

如果有一個一對一的,你有Categories表,然後子類別表B與父類別ID(從A)。

但如果他們能在多個類別中存在,那麼你很可能將有一個標準化的表結構,讓你有一個類別,子類別B和CAT_ID和Sub_ID的第三個表作爲一個記錄。

此外,有關產品,你也有一個標準化的表設置,你有產品表,分類表,然後用Product_Categories和PRODUCT_ID CATEGORY_ID。這是無限可擴展(上帝禁止)與子分類表,product_subcategories,子子,子子子,等等等等等等等等等等012等等。

相關問題