2016-02-24 23 views
2

我正在开发一个人们注册并加入组的Android应用程序。 我有一个单独的MySQL表,它存储用户的详细信息和另一个存储组详细信息的表。但是我遇到了与用户有关的问题。

users表中都会有他user_idnamepasswordemail_idaddress等组表将有关于该组的group_idgroup_name和其他细节。

我一定能够得到在mysql表中存储组成员的最佳方式

  1. 所有谁是一群
  2. 所有用户已加入的

快速,轻松地组中的用户。

注意:假设您有超过10万个用户和超过1000个组。

回答

5

这样做的惯用方法是有一个额外的N:M映射表,只是持有的成对的ID - 用户和他或她所属的组:

CREATE TABLE group_membership (
    user_id INT NOT NULL, 
    group_id INT NOT NULL, 
    PRIMARY KEY (user_id, group_id), 
    CONSTRAINT FOREIGN KEY (user_id) REFERENCES users (id), 
    CONSTRAINT FOREIGN KEY (group_id) REFERENCES groups (id) 
) 

而现在,例如,如果你想从my_group查询所有用户,你可以用一对夫妇这样做的加入:

SELECT u.* 
FROM users u 
JOIN group_membership gm ON u.id = gm.user_id 
JOIN groups g ON gm.group_id = g.id 
WHERE g.name = 'my_group' 
+0

恐怕这会增加存储的复杂性。 –

+3

@SenthilVidhiyakar好吧,它不会增加太多,因为只是存储int。 (ID)没有别的,但它是处理许多二义关系的最佳解决方案。 –

+0

每个用户都会加入n个组,并且group_membership表中的最大条目数不会超过NoOfEntriesInUser * NoOfGroups –

相关问题