我正在创建一个用户可以加入某些群组的网站。现在我需要维护每个组中的用户集和/或每个用户已加入的组集。由于MySql不支持数组,我无法维护,组中的用户数组(作为"组"表中的字段)或用户组中的数组(作为字段)在"用户"表中)。那我怎么能实现这个呢?
我目前的解决方案是维护一个包含userID和groupID字段的组订阅表。所以,当我需要这两个列表中的任何一个时,我都能做到,
SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3
或
SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4
这将获得所需的列表。这是最有效/标准的方法吗?还是有更好的方法?
答案 0 :(得分:1)
你写得很好。
通常,相对数据库中的记录之间存在3种类型的关系:
A
和user
通过profile
链接)user.profile_id = profile.id
和user
通过messages
链接)您的案例是最后一个,它始终通过第三个表格工作。
对于您的情况,它可以是message.user_id = user.id
选择具有订阅的所有用户的示例查询:
users_subscriptions (user_id, subscription_id)
答案 1 :(得分:1)
如果我理解你的问题,那就是标准方法。
您创建了一个位于用户表和groups表之间的“数据透视表”,它存储了两者之间的关系。这是多对多关系存储在关系数据库中的方式。正如您所说,您可以通过该方式检索组中的所有成员或所有组的所有成员。