【问题标题】:best way to store member of group in mysql table将组成员存储在mysql表中的最佳方法
【发布时间】:2016-02-24 06:51:13
【问题描述】:

我正在开发一个 android 应用程序,人们将在其中注册并加入群组。 我有一个单独的 MySQL 表,它存储用户的详细信息,另一个表存储组的详细信息。但我有问题将用户与组联系起来。

用户表将包含他的user_idnamepasswordemail_idaddress 等。组表将包含group_idgroup_name 以及有关组的其他详细信息。

我一定能得到

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

快速轻松。

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

【问题讨论】:

    标签: mysql database-design storing-data


    【解决方案1】:

    这样做的惯用方法是有一个额外的 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'
    

    【讨论】:

    • 恐怕这会增加存储复杂度。
    • @SenthilVidhiyakar 好吧,它不会增加太多,因为只是存储 int。 (ids) 没有别的,但它是处理 many2many 关系的最佳解决方案。
    • 每个用户将加入 n 个组,并且 group_membership 表中的最大条目数将上升到 NoOfEntriesInUser*NoOfGroups
    • 感谢您的解决方案。如果我能得到更好的解决方案将不胜感激..!!
    • 这是正确的方法。如果您想要不同的东西,请不要使用 RDBMS。
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多