2014-08-27 69 views
1

我正試圖在我的應用中實現一個簡單的標記系統。當用戶想要標記對象時,他們可以使用現有的標籤和/或同時創建新的標籤。我有一個表格「標籤」,它將唯一的標籤字符串值存儲爲PK。在'object_tag'中,我有一個FK參考這個專欄。在來自客戶端的請求中,可以有一個對象的多個標籤。在服務器上,我將遍歷所有標籤並將它們存儲在'object_tag'中。如果標籤不存在於'標籤'表中,則應該先插入。如果沒有找到,在參考表中添加記錄的最佳方法

什麼是最有效的方法來做到這一點?我可以在每次插入之前檢查標記是否存在,但是我想最小化數據庫I/O。

+0

相關:http://stackoverflow.com/questions/334183/what-is-the-most-efficient-way-to-store-tags-in-a-database – Adrian 2014-08-27 11:03:29

+0

相關:http://stackoverflow.com/questions/17619698/good-way-to-store-tags-in-relational-database-when-there-are-variable-numbers-of – Adrian 2014-08-27 11:04:16

+0

相關:http:// meta。 stackexchange.com/questions/100017/how-have-tags-been-stored-in-the-stack-overflow-database-design – Adrian 2014-08-27 11:05:58

回答

0

您將需要3個表如下:

對象 - 對象列表,主鍵OID 標籤 - 標籤列表,主鍵TID ObjectTag - 對OID,TID值

參見:

Tags: Database schemas

的問題:你想擁有一個數據庫架構,你可以標記一個 書籤(或博客文章或其他)與儘可能多的標籤,你想要的。 之後,您希望運行查詢來將書籤約束爲 聯合或交叉標籤。您還希望從搜索結果中排除(例如:減號) 一些標籤。

  • MySQLicious」 的解決方案 - 使用一個非規範化的表。 MySQLicious將del.icio.us數據導入具有此結構的表中。
  • 「Scuttle」解決方案 - Scuttle將其數據組織在兩個表格中。該表「scCategories」是「標籤」表,並且已經獲得了「書籤」表的外鍵。
  • 「Toxi Solution」Toxi想出了一個三表結構。通過表格「標籤地圖」,書籤和標籤是相互關聯的。每個標籤可以使用 連同不同的書籤,反之亦然。該DB模式是wordpress也使用的 。

也看到Tagging system: Toxi solution questions

+0

是的,這就是我的數據庫的外觀。我的問題是如何有效地將對象標籤插入到數據庫中。當我添加對象標籤時,我不知道標籤本身是否存在於標籤表中,因此我必須在每次插入之前檢查每個標籤是否存在。有沒有辦法解決這個問題,所以我不必每次都檢查一下? – 2014-08-27 14:24:55

相關問題