2011-08-23 67 views

回答

3

效率在很大程度上取決於你在做什麼。如果您想基於標籤名稱進行查詢,那麼如果您在標籤和項目表上同時使用標識符(即選項#2)的標籤表,則可能會更快。但是,除非你有成千上萬的行,否則它可能不會有所作爲。如果你根本沒有這麼多的標籤,那麼差距會更小。

但是,如果您想通過商品ID獲取標籤,第一種方法會稍微快一點。再次,我懷疑你會注意到。

還有其他一些考慮因素:數據完整性和規範化。如果您使用兩個表和外鍵,那麼讓您的標記集與項目保持一致更容易。如果標籤被移除,而您只使用一張桌子,則舊的項目仍然會有舊的標籤。此外,獲取唯一標籤列表並保持一致性更容易。如果您在另一個表中有標籤,這將打開一個全新的組織世界:您可以爲標籤創建和修改製作時間戳,將標籤標記爲活動或非活動狀態(可能還有其他狀態)等。

-1

一張桌子會更有效率,但有兩張桌子通常是存儲簡單標籤的正確方法。

1

第二個選項。分開存儲標籤。如果將它們存儲在單個字段中,您將無法編寫好的查詢來搜索特定的標記。您不想使用MATCH或LIKE來過濾標籤。通過將它們存儲在單獨的表格中,您可以輕鬆找到所需的標籤以及相關的文章。不過,您的表格確實需要進行正確的索引。

如果您需要查詢這些值,請不要在數據庫中存儲逗號/空格/其他分隔值。數據庫的全部本質是以結構化的方式存儲數據。這樣數據庫可以在很大程度上優化數據的檢索。

+0

絕對說話(例如:「從不」)可能是危險的。 IIRC StackOverflow例如使用第一個選項作爲其標籤(以及第二個選項)。 – NullUserException

+0

@NullUserException出於好奇,第一個選項和第二個選項意味着什麼? – Lior

+1

當然,你永遠不應該說永遠。總是有例外。甚至可能有數據庫支持在逗號分隔的字段上使用智能索引的「標記」字段類型。但是*一般來說*你不應該以這種方式存儲分隔值。如果你還沒有那麼有經驗的話,在你對此事有足夠的瞭解以故意違反一些規則之前,'永不'是一個好的經驗法則。 ;) – GolezTrol

0

第二個版本,將數據分割成兩個額外的表,是很多更有效,因爲它允許數據庫使用索引來運行的查詢你大多需要(Get all texts with a certain tagget a count of how often the tags are used sorted by count的標籤雲,和get all tags for the given text

相關問題