使用taglist字段,所有標籤用空格分隔,還是使用2個表(tag:tagid tagtext,tagitem:tagid,itemid)會更高效嗎?以數據庫方式處理標籤的更有效方法是什麼?
回答
效率在很大程度上取決於你在做什麼。如果您想基於標籤名稱進行查詢,那麼如果您在標籤和項目表上同時使用標識符(即選項#2)的標籤表,則可能會更快。但是,除非你有成千上萬的行,否則它可能不會有所作爲。如果你根本沒有這麼多的標籤,那麼差距會更小。
但是,如果您想通過商品ID獲取標籤,第一種方法會稍微快一點。再次,我懷疑你會注意到。
還有其他一些考慮因素:數據完整性和規範化。如果您使用兩個表和外鍵,那麼讓您的標記集與項目保持一致更容易。如果標籤被移除,而您只使用一張桌子,則舊的項目仍然會有舊的標籤。此外,獲取唯一標籤列表並保持一致性更容易。如果您在另一個表中有標籤,這將打開一個全新的組織世界:您可以爲標籤創建和修改製作時間戳,將標籤標記爲活動或非活動狀態(可能還有其他狀態)等。
一張桌子會更有效率,但有兩張桌子通常是存儲簡單標籤的正確方法。
第二個選項。分開存儲標籤。如果將它們存儲在單個字段中,您將無法編寫好的查詢來搜索特定的標記。您不想使用MATCH或LIKE來過濾標籤。通過將它們存儲在單獨的表格中,您可以輕鬆找到所需的標籤以及相關的文章。不過,您的表格確實需要進行正確的索引。
如果您需要查詢這些值,請不要在數據庫中存儲逗號/空格/其他分隔值。數據庫的全部本質是以結構化的方式存儲數據。這樣數據庫可以在很大程度上優化數據的檢索。
絕對說話(例如:「從不」)可能是危險的。 IIRC StackOverflow例如使用第一個選項作爲其標籤(以及第二個選項)。 – NullUserException
@NullUserException出於好奇,第一個選項和第二個選項意味着什麼? – Lior
當然,你永遠不應該說永遠。總是有例外。甚至可能有數據庫支持在逗號分隔的字段上使用智能索引的「標記」字段類型。但是*一般來說*你不應該以這種方式存儲分隔值。如果你還沒有那麼有經驗的話,在你對此事有足夠的瞭解以故意違反一些規則之前,'永不'是一個好的經驗法則。 ;) – GolezTrol
第二個版本,將數據分割成兩個額外的表,是很多更有效,因爲它允許數據庫使用索引來運行的查詢你大多需要(Get all texts with a certain tag
,get a count of how often the tags are used sorted by count
的標籤雲,和get all tags for the given text
)
- 1. 什麼是一些更有效的方式來處理查詢?
- 2. 什麼是處理數據庫中大量表的最有效方法?
- 3. 處理SQLite數據庫的最佳方式是什麼?
- 4. PHP:什麼是更好的方式來處理表單數據?
- 5. 什麼是處理數據庫的正確方法?
- 6. 什麼是從其他數據庫更新表數據的最有效方法?
- 7. 以非編程方式處理SQL Server數據的最佳方式是什麼?
- 8. 將數據庫導入Django/Postgres的有效方法是什麼?
- 9. 什麼是最有效的方式來處理這個功能?
- 10. 將數據加載到db的更有效方法是什麼?
- 11. 在數據庫字段名稱中處理'THE'的標準方式是什麼
- 12. 什麼是爲數據框創建模式的有效方法?
- 13. 將標籤插入表格的最有效方法是什麼
- 14. 處理從套接字讀取數據的最有效方法是什麼?
- 15. 使用python處理大量磁盤數據的最有效方法是什麼?
- 16. 處理「hg import」拒絕的最有效方法是什麼?
- 17. 處理來自textarea的多行數據;更有效的方式?
- 18. 處理整數數據類型是否有更有效的方法?
- 19. 是否有重構此SQLite數據庫處理程序的有效方法?
- 20. 處理複雜直方圖數據的最有效方法?
- 21. 如何以最有效的方式更新數據庫?
- 22. 什麼是以編程方式刪除大型數據庫的最佳方法
- 23. 是否有更有效的方法來處理重複功能?
- 24. 處理大型數據表的最佳方式是什麼?
- 25. Android中處理大量數據的最快方式是什麼?
- 26. 處理變更管理的最佳方式是什麼?
- 27. 處理三維體素數據的最佳方法是什麼?
- 28. 處理複雜數據結構的正確方法是什麼?
- 29. 根據值列表查詢數據庫的最有效方法是什麼?
- 30. SQlite中的數據庫清理的方法是什麼?
其中之一,是。這很大程度上取決於您的數據庫結構(迄今爲止)以及您想要達到的目標(根本)。 – KingCrunch