2012-08-28 28 views
0

我有一個數據庫,其中有一個網站地址列表,每個列表都有一個類別。 我有site_id, site_url and site_category表中的字段。在site_category我有純英文的類別,如:電影,教程等...按分類名稱查找或製作附加表格

我想知道什麼是更好的速度。要這樣做,或有兩個表:

網站:site_id, site_url and site_category

分類:category_id, category_name

而且在site_category的 「網站」 表只把category_id

我正在用PHP創建一個目錄,並且想要知道,在想要查詢的那一刻,什麼更好。謝謝!

回答

0

與幾乎所有的SQL一樣,它的確取決於一大堆因素。

通常,針對單個表的查詢可能會比針對兩個表的查詢執行得更好。


隨着「CATEGORY_NAME」相對較短的值(比如8個字符以內),並用適當的指數CATEGORY_NAME作爲前導列,你會得到這樣的查詢性能好:

SELECT * FROM websites WHERE category_name = 'movies' ORDER BY category 

爲獲得最佳性能,請爲category_name考慮ENUM列。但這意味着category_name的值將作爲列定義的一部分「固定」。

如果您需要獲取不同category_name值的列表(例如,對於下拉列表框),則會優先使用單獨的表(例如您的示例中的Categories表)。

最大的問題是「類別」是否是您系統中的實體。也就是說,「類別」是指對業務很重要的個人,地點,事物,概念或事件,可以唯一標識,並且您需要存儲信息。

如果是這樣,它是一個「實體」,你想爲它創建一個單獨的表。


您需要考慮的一個更大的問題是網站和類別之間的關係。一個網站可以有多個類別?

如果是這樣,那麼你需要考慮一個關係表,它涉及到網站和類別。例如:

website_category (website_id, category_id) 

這是至關重要的實體之間的「實體」和「關係」在你的數據庫設計適當的代表。在調整優化性能之前,請確保您首先得到正確的結果。

0

它看起來像你試圖預優化您的網站,犧牲一個好的normalized數據庫設計。我的建議:設置兩個不同的表格。一個用於類別。另一個用於網站。然後通過類別ID鏈接兩者。這樣,如果您需要更新類別名稱,則不必在網站表格中更新多行。

0

你的第二種方法更健壯。如果您想更改某個類別的名稱,則只需更改一次即可。

此外,在您想要在網站上擁有多個類別的情況下,它會給您更多的靈活性。