用户,组和标签数据库设计

时间:2012-03-21 13:29:30

标签: sql database-design

我在尝试为以下场景设计数据库结构时遇到了困难:

  

我的数据库应包含一般用户信息UserID,FirstName,   LastName,JoiningDate。

     

每个用户都可以成为群组的一部分。

     

每个组都附有“标签”,可以有多个标签。用户   还应该能够返回可用组的列表(过滤方式   标签)。

     

能够搜索一个组(通过附加到该组的标签),以及   搜索特定用户(按姓氏或唯一ID)。 )。它也应该能够   返回可用组列表(按标签过滤)和   特定组的成员(按姓氏过滤并按过滤   加入日期)。

     

还应该有一种发现方式   用户组属于多个组(查询)   “谁是”布拉沃集团“和”三角洲“的成员   组),并跟踪组中发送的消息(如a   论坛)。

这只是两张桌子吗?或者它应该是三个表...用户,组和标签?自从我做了任何关系数据库之后差不多一年了,我想知道是否有人能展示这个数据库设计的直观表示?

2 个答案:

答案 0 :(得分:5)

我建议使用五个表:用户,组,标签和链接表UserGroups和GroupTags。

这是因为用户和组之间以及组和标签之间似乎存在多对多关系 - 关系设计中需要链接实体来加入具有它们之间多对多关系的实体。 / p>

 ---------   ------------   --------
 | Users |   |  Groups  |   | Tags |
 ---------   ------------   --------
     |         |      |        |
     |         |      |        |
    /|\       /|\    /|\      /|\
   --------------    -------------
   | UserGroups |    | GroupTags |
   --------------    -------------

答案 1 :(得分:0)

绝对至少3:用户,群组和标签。

并且因为您在组和标签之间使用多对多关系(假设来自您的描述),您可能需要一个交叉表来将组和标签链接在一起。

如果一个用户可以属于更多组,则用户和组之间也应该存在交叉表。