我正在設計一個新網站的數據庫,用戶可以選擇他們喜歡的音樂流派。每個流派都有一個id與之相關聯,所以如果John喜歡流行,搖滾和R & B他喜歡1,2和3.我應該如何在MySQL表中存儲這些多個值?
將這些存儲在users表中的最佳方式是什麼?
現在我有他們這樣的:
genre_id | user_id
------------------
1,2,3 | 1
,並在php我爆炸的逗號分隔符這些值,抓住個別ID的方式。但是,這顯然不是正確的方式。
我知道我可以有一個名爲「genre_to_user」一個單獨的表,併爲每個流派約翰喜歡我可以輸入一個進入該表所示:
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
而且把所有的那些約翰喜歡我可以做一個SELECT * FROM 'genre_to_user where user_id = 1
但我不認爲這將是非常有效的,從長遠來看,當該表充滿了大量的記錄。因爲我將爲每個用戶在同一頁面上有多達30個用戶的列表頁面上進行一次計算。這些網頁遍佈整個網站。
那麼什麼是正確的(和高效)的方式去呢?
此外,是否有在MySQL中的任何數據類型,用於存儲逗號分隔值,而不是隻是將它們粘在varchar字段?
「巨大的記錄數量」 - 有多少對你來說是巨大的?因爲我懷疑你有700萬個不同的流派供用戶選擇。讓索引做他們應該做的事(甚至700萬對數據庫來說也不是很大)。 – Blake
其實,我相信你提到的第二個解決方案可能是解決這個問題的最好方法。通常,你會在user_id列上有一個索引,所以檢索速度會非常快。 –