分组标记的数据库实现

时间:2014-12-19 05:24:06

标签: mysql database database-design tags tagging

我需要实现一个类似这样的标记系统: -

每个用户都可以根据他的教育进行标记。 (标签是:小学,中学,高中)这些标签属于“教育”的范畴。同样,用户也可能被标记为他的兴趣(板球,足球,摇滚音乐,流行音乐......)板球和足球来自“体育”,摇滚音乐和流行音乐属于“音乐”。

目前的设计是:

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中的TagID。如果开发者不这样做,流行音乐和板球有可能引用相同的TagID采取必要的照顾。

如何避免这种多重引用的可能性?

注意:辅助表已用于检查标签是否属于同一个伞。这是分组标签的特征是必要的。

1 个答案:

答案 0 :(得分:0)

看起来你需要类似的东西:

enter image description here

注意:标签名称在上面的模型中是全局唯一的。如果您需要使每个类别都是唯一的,只需在UNIQUE约束TAG.U1中包含TAG_CATEGORY_ID。


顺便说一下,您是否需要将用户限制为某些类别中的一个标签?例如,用户是否可以同时拥有“教育”类别中的主要和次要标签?如果你需要限制这个,你需要以不同的方式引用这样的标签(而不是“简单的”连接表USER_TAG),并且会有一些复杂性来防止混合“单个”和“多个”标签。