2010-05-15 56 views
4

我正在一個圖像共享網站工作,並希望爲圖像實現標記。此標籤解決方案的效果如何?

我讀過問題#20856#2504150

我有對上述問題的方法很少關注。首先,將圖像鏈接到標籤看起來很容易。然而,通過標籤關係獲取圖像並不容易。不容易,因爲您必須從一個表中獲取圖像到標籤的關係,然後用一堆OR語句(每個圖像一個OR)進行大量查詢。

之前,我甚至研究的標記話題我開始測試下面的方法:在圖片表列將與多個字符串

Table: Image 
Columns: ItemID, Title, Tags 

Table: Tag 
Columns: TagID, Name 

標籤:

此表作爲例子tagID來自標記表用虛線( - )括起來。

例如:

-65-25-105- 

鏈接與標籤識別 65,25和105

用這種方法我發現它更容易通過標籤獲得的圖像,我可以得到圖像標籤識別一個查詢,並得到所有的圖像與像另一個簡單的查詢:

SELECT * FROM Image WHERE Tags LIKE %-65-% 

所以,如果我使用此方法進行標記,

這是多麼有效?

查詢LIKE%-65-%緩慢的過程?

我可以在未來面對什麼問題?

回答

4

你需要3個表格。

Table: Image 
Columns: ImageId, ItemID, Title 

Table: Image_Tag 
Columns: ImageId, TagId 

Table: Tag 
Columns: TagID, Name

然後讓所有的圖片你可以使用一個標籤:

SELECT ImageId, Title 
FROM Image_Tag LEFT JOIN Image USING (ImageId) 
WHERE TagId = $TagId

這是處理關係數據庫中的許多一對多關係的典型方式。你可能會通過閱讀大約http://en.wikipedia.org/wiki/Database_normalization

編輯:我看到這已經在您引用的其他問題的地址,所以我會進一步解釋。我所看到的最大的問題是,您無法利用索引id列來減少查詢的效率。它也看起來像更新笨拙。我強烈建議不要試圖這樣做,至少要嘗試使用3表解決方案。一旦它爲你「點擊」,你會感謝我。

+1

感謝您的意見,僅僅是我讀了很多關於左連接緩慢的故事。我會和三張桌子一起去,人們似乎真的很喜歡這個。 – Pablo 2010-05-15 04:23:47

相關問題