我在尝试为以下场景设计数据库结构时遇到了困难:
我的数据库应包含一般用户信息UserID,FirstName, LastName,JoiningDate。
每个用户都可以成为群组的一部分。
每个组都附有“标签”,可以有多个标签。用户 还应该能够返回可用组的列表(过滤方式 标签)。
能够搜索一个组(通过附加到该组的标签),以及 搜索特定用户(按姓氏或唯一ID)。 )。它也应该能够 返回可用组列表(按标签过滤)和 特定组的成员(按姓氏过滤并按过滤 加入日期)。
还应该有一种发现方式 用户组属于多个组(查询) “谁是”布拉沃集团“和”三角洲“的成员 组),并跟踪组中发送的消息(如a 论坛)。
这只是两张桌子吗?或者它应该是三个表...用户,组和标签?自从我做了任何关系数据库之后差不多一年了,我想知道是否有人能展示这个数据库设计的直观表示?
答案 0 :(得分:5)
我建议使用五个表:用户,组,标签和链接表UserGroups和GroupTags。
这是因为用户和组之间以及组和标签之间似乎存在多对多关系 - 关系设计中需要链接实体来加入具有它们之间多对多关系的实体。 / p>
--------- ------------ --------
| Users | | Groups | | Tags |
--------- ------------ --------
| | | |
| | | |
/|\ /|\ /|\ /|\
-------------- -------------
| UserGroups | | GroupTags |
-------------- -------------
答案 1 :(得分:0)
绝对至少3:用户,群组和标签。
并且因为您在组和标签之间使用多对多关系(假设来自您的描述),您可能需要一个交叉表来将组和标签链接在一起。
如果一个用户可以属于更多组,则用户和组之间也应该存在交叉表。