在mysql表中存储组成员的最佳方法

Sen*_*kar 3 mysql database-design storing-data

我正在开发一个Android应用程序,人们将在其中注册并加入群组.我有一个单独的MySQL表,用于存储用户的详细信息,另一个表用于存储组的详细信息.但我有问题将用户与群组相关联.

users表中都会有他user_id,name,password,email_id,address,等分组表将有group_id,group_name和有关组的其他细节.

我一定能够得到

  1. 组中的所有用户
  2. 用户加入的所有组

快速轻松.

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

Mur*_*nik 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)
)
Run Code Online (Sandbox Code Playgroud)

现在,例如,如果您希望查询所有用户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'
Run Code Online (Sandbox Code Playgroud)

  • @SenthilVidhiyakar好吧,因为只是存储int所以不会增加太多.(ids)别无其他,但它是处理many2many关系的最佳解决方案. (3认同)
  • 这是正确的方法.如果您想要不同的东西,请不要使用RDBMS. (2认同)