剛學習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語句就搞定了,並且查詢速度也還好... 但是隨著時間的增長,這個關聯表肯定會有超多的數據,這時候這個查詢應該會很慢吧?
希望有人解答...提前謝謝各位
漂亮男人2017-05-18 10:51:42
首先,你給的文章表和問題表看得我眼花..結構相同就算了吧,數據還相同...
其次,你一開始相處的解決辦法tags是不可取的...很難對tags進行修改,而且就像你說的,很難查詢;
至於文章表和問題表的合併,完全沒有必要,這涉及到數據庫的設計,可以去了解下數據庫的範式;
最後,關聯表的想法就很好,利用aq_id和tag_id也是正確的。至於你說以後可能會有超多的數據,放心吧,且不說mySql不是吃素的,數據多這個問題在你以後的學習當中也會得到解決的
我想大声告诉你2017-05-18 10:51:42
你一開始相處的解決辦法tags是可以查詢的,tags每個數字前後都用符號隔離開,用like查詢例如, ,1,11,31,當查詢1的時候可以tags like 」%,1, %“。這樣應該可以查出來。