2010-08-22 149 views
7

我有一個包含兩個表的數據庫:將標籤存儲在數據庫中的最佳方式?

  • 標籤

條目表中包含的帖子,每個都有一個或多個標籤。問題是,每個帖子可以有任意數量的標籤。換句話說,我不能有'tag1','tag2'等列,並做一個LEFT JOIN。

我應該如何設置條目,以便每個帖子可以有任意數量的標籤?

回答

11

您需要一個映射表。

創建一個名爲entries_tags表包含兩列:entry_idtag_id,對兩個條目多鍵。

這被稱爲多對多的關係

+0

是的,並確保沒有條目重複標籤。更新標籤會有點棘手,因爲您需要確保現有標籤保持不變,添加新標籤,刪除標籤。當然,你可以隨時刪除所有內容,然後重新添加它們以節省比較的麻煩。我會說優點和缺點。 – 2010-08-22 01:49:45

+1

@ o.k.w:您可以通過外鍵約束和事務更新來處理所有這些問題。 – Borealid 2010-08-22 01:53:27

+0

@ o.k.w:另外,兩個列上的主鍵(首選)或唯一約束將確保每個組合的唯一性。 – 2010-08-22 01:57:02

3

你也可以做到這一點的SO-方式,這裏除了具有結/映射/交集表,你有那加標籤條目的標籤列表:

entries table: 
post_id: 3539744, .... tags: sql, database, database-design, tags, data-modeling 

如果您在爲條目拉取相關標籤時,不能使用聯結表的性能。當然,在這裏需要格外小心,因爲你正在處理非規範化的數據。

相關問題