mysql - 维护网站中组的订阅列表

时间:2016-09-14 15:00:35

标签: mysql user-management

我正在创建一个用户可以加入某些群组的网站。现在我需要维护每个组中的用户集和/或每个用户已加入的组集。由于MySql不支持数组,我无法维护,组中的用户数组(作为"组"表中的字段)或用户组中的数组(作为字段)在"用户"表中)。那我怎么能实现这个呢?

我目前的解决方案是维护一个包含userID和groupID字段的组订阅表。所以,当我需要这两个列表中的任何一个时,我都能做到,

SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3 

SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4

这将获得所需的列表。这是最有效/标准的方法吗?还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

你写得很好。

通常,相对数据库中的记录之间存在3种类型的关系:

  1. 一对一(例如Auser通过profile链接)
  2. 一个 - 多个(user.profile_id = profile.iduser通过messages链接)
  3. 很多 - 很多
  4. 您的案例是最后一个,它始终通过第三个表格工作。

    对于您的情况,它可以是message.user_id = user.id

    选择具有订阅的所有用户的示例查询:

    users_subscriptions (user_id, subscription_id)

答案 1 :(得分:1)

如果我理解你的问题,那就是标准方法。

您创建了一个位于用户表和groups表之间的“数据透视表”,它存储了两者之间的关系。这是多对多关系存储在关系数据库中的方式。正如您所说,您可以通过该方式检索组中的所有成员或所有组的所有成员。