mysql - 標籤表的一些問題
世界只因有你
世界只因有你 2017-05-18 10:49:42
0
2
724

剛學習mysql對mysql不熟悉,現在我有這樣子的三個表格

文章表

id title content
0 hello world
1 hey ....

問題表

id title content
0 hello world
1 hey ....

標籤表

id name avatar
1 java ....
2 js ....

兩個表都共用一個標籤表,標籤表的avatar是標籤的頭像,每個標籤都有屬於自己的頭像或預設的頭像。
我現在的問題是怎麼把標籤表和其他兩個表關聯起來? 要保證能根據標籤id快速的查出文章或話題。

我想的第一個解決方案是在文章表和問題表的下面加一個tags的欄位。用逗號分開(不知道好不好...),然後我發現我特喵的不會查 ... 這樣要怎麼查詢呢... 使用like嗎...

文章表

id title content tags
0 hello world 0,1
1 hey .... 2,3,4

問題表

id title content tags
0 hello world 1,4
1 hey .... 6,3

然後我又想了第二個方案,因為文章表和問題表的結構基本上完全一致,我是不是可以把它們合併起來呢?

問題和文章標的結合體....

id title content tags type
0 hello world 1,4 article
1 hey .... 6,3 question

然後我又覺得不應該合併吧?因為分開的話資料庫沒那麼大,如果我只是想找全部標籤為1的問題,單表查詢的話會快一些吧?

之後又想了第三個方案,弄一個關聯表怎麼樣呢,話說這個關聯表需要id的嗎... 不是很懂.. 如果有了關聯表,那麼文章和問題的表是不是就不需要tags字段了呢。

關聯表

aq_id tag_id
0 1
1 6
0 4
1 3

這樣子查詢好像比較簡單? 直接一條select語句就搞定了,並且查詢速度也還好... 但是隨著時間的增長,這個關聯表肯定會有超多的數據,這時候這個查詢應該會很慢吧?

希望有人解答...提前謝謝各位

世界只因有你
世界只因有你

全部回覆(2)
漂亮男人

首先,你給的文章表和問題表看得我眼花..結構相同就算了吧,數據還相同...
其次,你一開始相處的解決辦法tags是不可取的...很難對tags進行修改,而且就像你說的,很難查詢;
至於文章表和問題表的合併,完全沒有必要,這涉及到數據庫的設計,可以去了解下數據庫的範式;
最後,關聯表的想法就很好,利用aq_id和tag_id也是正確的。至於你說以後可能會有超多的數據,放心吧,且不說mySql不是吃素的,數據多這個問題在你以後的學習當中也會得到解決的

我想大声告诉你

你一開始相處的解決辦法tags是可以查詢的,tags每個數字前後都用符號隔離開,用like查詢例如, ,1,11,31,當查詢1的時候可以tags like 」%,1, %“。這樣應該可以查出來。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板