2014-03-27 24 views
0

我有行的表是這樣的:我應該將標籤存儲在文本字段還是單獨的表格中?

id : path : tags 
1 : pictures/pic1.jpg : car bmw 
3 : pictures/pic2.jpg : cat animal pussy 
4 : pictures/pic3.png : gun 

基本上這就是我在表中存儲路徑的圖片畫廊,所以我可以列出他們在網頁上。

用戶可以根據他提供的關鍵字搜索某些圖片。因此,例如,他將「車槍」輸入到搜索字段中,並且具有這些標籤之一的所有圖片都會被拉出。 基本標籤搜索:

SELECT * FROM pictures WHERE tags LIKE '%car%' OR tags LIKE '%gun%' 

現在我想知道的是什麼,什麼是存儲標籤更好的解決方案?它是上述一個或這一個:

表圖片:

id : path 
1 : pictures/pic1.jpg 
3 : pictures/pic2.jpg 
4 : pictures/pic3.png 

表標籤:

pic_id : tag 
1 : car 
1 : bmw 
4 : gun 
..and so on.. 

標籤都存儲在一個單獨的表在這裏和每個標籤都有自己的行,所以在搜索過程中,我將執行JOIN並以這種方式搜索匹配項。

哪種解決方案更好?

+0

你migh我想閱讀[數據庫規範化](https://en.wikipedia.org/wiki/Database_normalization) – kero

+0

我會去「帶pic_id的表格標籤」,只是因爲它呼吸,感覺更像是一個關係數據庫SQL變體是。 –

回答

1

關於標準化和可重用性,我建議是這樣的:

表圖片:

id : path 
1 : pictures/pic1.jpg 
2 : pictures/pic2.jpg 
3 : pictures/pic3.png 

表標籤:

tag_id : tag 
1 : car 
2 : bmw 
3 : gun 

表tags_pictures:

id : tag_id : pic_id 
1 : 1 : 1 
2 : 2 : 1 
3 : 3 : 3 
2

這些情況下的最佳方法是爲每個圖像的標籤創建一箇中間表,以建立多對多的關係。

然後,您將有三個表格:一個用於存儲帶有其id和屬性的圖像,另一個用於保存標籤及其ID,最後還有一個表格,用於保存所有標籤的圖像ID和標籤ID。

+0

是的,我也在考慮這個解決方案,但因爲需要3張桌子而丟棄它,我擔心它會影響性能。 – user3240613

+0

@ user3240613除非你有100000行,否則你並不需要擔心性能 – kero

+0

@ user3240613正如kingkero所說,行和表的數量並不是問題,相比之下你每次都會遇到缺乏性能的問題必須在另一種方法中解析每組標籤。 – emibloque

相關問題