我有一個包含兩個表的數據庫:將標籤存儲在數據庫中的最佳方式?
- 項
- 標籤
條目表中包含的帖子,每個都有一個或多個標籤。問題是,每個帖子可以有任意數量的標籤。換句話說,我不能有'tag1','tag2'等列,並做一個LEFT JOIN。
我應該如何設置條目,以便每個帖子可以有任意數量的標籤?
我有一個包含兩個表的數據庫:將標籤存儲在數據庫中的最佳方式?
條目表中包含的帖子,每個都有一個或多個標籤。問題是,每個帖子可以有任意數量的標籤。換句話說,我不能有'tag1','tag2'等列,並做一個LEFT JOIN。
我應該如何設置條目,以便每個帖子可以有任意數量的標籤?
您需要一個映射表。
創建一個名爲entries_tags
表包含兩列:entry_id
和tag_id
,對兩個條目多鍵。
這被稱爲多對多的關係。
你也可以做到這一點的SO-方式,這裏除了到具有結/映射/交集表,你有那加標籤條目的標籤列表:
entries table:
post_id: 3539744, .... tags: sql, database, database-design, tags, data-modeling
如果您在爲條目拉取相關標籤時,不能使用聯結表的性能。當然,在這裏需要格外小心,因爲你正在處理非規範化的數據。
是的,並確保沒有條目重複標籤。更新標籤會有點棘手,因爲您需要確保現有標籤保持不變,添加新標籤,刪除標籤。當然,你可以隨時刪除所有內容,然後重新添加它們以節省比較的麻煩。我會說優點和缺點。 – 2010-08-22 01:49:45
@ o.k.w:您可以通過外鍵約束和事務更新來處理所有這些問題。 – Borealid 2010-08-22 01:53:27
@ o.k.w:另外,兩個列上的主鍵(首選)或唯一約束將確保每個組合的唯一性。 – 2010-08-22 01:57:02