2011-12-29 58 views
1

因此,我有一個食譜數據庫,並且我想將關鍵字或標籤與每餐相關聯,例如 作爲'中國','意大利','低卡'等。 用戶從不提交關鍵字,因此我可以完全控制。 您認爲以下哪一項是最佳方法?在Mysql中實現關鍵字或標籤的最佳方式

答:我可以在餐桌中填寫一列,後面加上關鍵字後加逗號。 意大利人,健康等等。然後,我可以從一列中的單一行抓取結果,然後使用PHP解析結果並完成繁重的工作。

B)我可以有一個關鍵字表,每行包含了meal_id,然後是一個關鍵字。然後我可以查詢具有該ID的所有關鍵字。

或者是否有更好的方法來執行關鍵字,如全文?

+0

您是否需要使用此關鍵字搜索所有餐食? – 2011-12-29 20:48:57

+0

是的,它必須使用該關鍵字匹配任何膳食,然後我會向用戶顯示與其相關的膳食。 – Naterade 2011-12-29 20:50:18

回答

8

如果您使用關鍵字表示類似標籤的東西,這些標籤在很多網站上都有使用,例如StackOverflow。那麼你會有三張桌子。一張餐桌,一張帶關鍵字的桌子,以及一張桌子連接在一起。通過這種方式,您可以使用簡單的SQL查詢高效地列出與某個關鍵字相關的所有餐食。

+0

是的。其實這是你最好的選擇。這創造了多對多的關係減少冗餘。 – 2011-12-29 20:51:36

+0

這麼多好的答案,但我喜歡克里斯托弗的解釋。我正在考慮這條路線,但問問專家總是很好的! – Naterade 2011-12-29 21:08:16

+0

@Naterade樂於幫忙! – 2011-12-29 21:09:52

0

肯定會與B.這是更規範化的選項,將是最容易與之合作。否則你的代碼將不得不解析查詢結果。

+0

但是,對於選項B *關鍵字*表示指向其他關鍵字表的ID。 – 2011-12-29 20:52:57

+1

我不認爲這就是他的意思,但我同意。最好的答案是在'meal'和'keyword'之間建立一個關聯表,如'meal_keyword',其中包含'meal'和'keyword'的id。 – 2011-12-29 20:55:50

1

我肯定會使用單獨的關鍵字表來確保您的數據庫是正常化的。

0

B更適合當您通過標籤進行搜索時將是一件小事。用A你必須更努力地工作。此外,通過使用GROUP_CONCAT(標籤),您也可以使用B獲取通信分隔標籤

相關問題