2014-12-19 33 views
0

我需要實現一個如下所示的標記系統: -分組標記的數據庫實現

每個用戶都可以基於他的教育進行標記。 (標籤是:小學,中學,高中),這些標籤屬於「教育」的保護範圍。類似地,用戶也可能被標註在他的興趣上(板球,足球,搖滾音樂,流行音樂......)板球和足球來自「體育」,搖滾音樂和流行音樂來自「音樂」。

目前的設計是:

User Userid TagID TagName  UserId TagID 
=========== =============  ============ 
1 User1  1 Pop    1  1 
2 user2  2 Rock    1  2 
       3 Techno   1  5 
       4 Cricket   1  6 
       5 Football   2  1 
       6 Primary Scl.  2  4 
       7 Secondary scl 2  7 

這3形式的主要表,讓許多用戶和標籤之間的多對多關係。

二次表是:

(Music)      (Sports)     (Education) 
TagID MusicID MusicType  TagID SportID Sport  TagID EducationID Education 
=======================  ====================  ============================ 
1 1  Pop Music  4  1  Cricket 6  1  Primary 
2 2  Rock Music  5  2  Football 7  2  Secondary 
3 3  Techno Music 

在這種結構的問題是,從表TagTable一個標籤識別可以通過音樂和體育引用如果不注意taken.There的是,流行音樂和板球機會如果開發者沒有采取必要的措施,將會引用相同的TagID。

如何避免多次引用的可能性?

注意:輔助表已用於檢查標籤是否屬於同一傘。這是分組標記的功能是必要的。

回答

0

看起來你需要一些與此類似:

enter image description here

注:標記名稱是全局在上面的模型中是獨一無二的。如果您需要使每個類別具有唯一性,請在UNIQUE約束TAG.U1中包含TAG_CATEGORY_ID。


順便說一句,你需要用戶從某些類別的限制只有一個標籤?例如,用戶可以同時擁有教育類別中的主要和次要標籤嗎?如果您需要限制這一點,則需要以不同的方式引用此類標籤(與「簡單」交叉表USER_TAG相對),並且防止混合「單個」和「多個」標籤會有一定的複雜性。

+0

一些標籤需要有限制。就像用戶可以有主要或次要的,其他標籤如體育或音樂可以是「多」。我知道會有複雜的事情發生,如果你能幫上忙的話,會很好。 – Rocode 2014-12-22 04:35:01