用户定义组的数据库设计

时间:2013-07-21 02:13:10

标签: sql database database-design

我正在试图找出设计数据库以支持私有用户定义组的最佳方法。与Google Circles的完全相同。这些用于 JUST 用户,就像圈子一样 - 这就是创建像我在这里找到的用户组设计的原因:https://stackoverflow.com/a/9805712/2580503是不可取的。

到目前为止,我能提出的唯一解决方案是拥有这样的表:

  
    

USER_ID | GROUP_ID | ARRAY(USER_ID)

  

PKEY实际上是(USER_ID,GROUP_ID)的复合键。这样,用户可以拥有多个组。

非常感谢有关此提议解决方案的任何反馈,并希望听到是否有更好的方法来做到这一点。

谢谢!

编辑:为了澄清,GROUP_ID不会引用单独的表,它只会指示该用户的号码组。此外,该小组也会有一个名称等等 - 只是没有必要将其作为问题的一部分。

3 个答案:

答案 0 :(得分:0)

怎么样?

Groups (GROUP_ID, USER_ID, GROUP_NAME)
Members (MEMBER_ID, GROUP_ID, USER_ID)

虽然Groups可能会向后显示,但它实际上会列出拥有USER_ID的{​​{1}},而GROUP_ID会将Members列为可能与之关联的行MEMBER_ID与给定USER_ID中的GROUP_ID有关。

答案 1 :(得分:0)

怎么样

**Users**
id, name

**Groups**
id, name

**User_Groups**
id, user_id, group_id

**Group_users**
id, user_group_id, user_id

我已将groupsuser_groups分开,假设您可能希望每个用户都有一些默认groups,如果不是这样,您可以移动group_name直接发送到user_groups并忽略groups

答案 2 :(得分:0)

如果您需要标准化设计,则必须至少包含三(3)个表格。 USERS,USER_GROUPS和USER_GROUPS_MEMBERS。你是对的,USER_GROUPS的PK是一个二元组(USER,GROUP)。 USER_GROUPS_MEMBERS的PK将是三元组(USER,GROUP,USER)。