【问题标题】:Users, Groups and Tags database design用户、组和标签数据库设计
【发布时间】:2012-03-21 13:29:30
【问题描述】:

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

我的数据库应该包含一般用户信息 UserID、FirstName、 姓氏,加入日期。

每个用户都可以是组的一部分。

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

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

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

这只是两张桌子吗?还是应该是三个表……用户、组和标签?自从我做任何关系数据库的东西以来已经快一年了,我想知道是否有人可以展示这个数据库设计的可视化表示?

【问题讨论】:

    标签: sql database-design


    【解决方案1】:

    我建议五个表:Users、Groups、Tags 和链接表 UserGroups 和 GroupTags。

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

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

    【讨论】:

    • 谢谢马克,你可以在图表中显示这个吗?
    • 哈哈,我喜欢你花时间做这件事的方式,我只是想快速转储屏幕,但是是的,它有帮助! +1
    【解决方案2】:

    绝对至少 3 个:用户、组和标签。

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

    如果一个用户可以属于多个组,那么用户和组之间也应该有交叉表。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 2016-05-18
      • 2017-01-18
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多