我有一个web应用程序,允许用户加入多个组。
我有一个“用户”表,它存储有关用户的详细信息(id、电子邮件、密码等)。和一个“组”表,该表存储有关可用组的详细信息(id、名称、组所有者)。
我一直在研究存储组成员关系的最佳方法(即哪些用户属于哪个组,请记住他们可以是多个组的成员)--但是我仍然不确定最有效的解决方案是什么。
你能推荐我:-
我使用的数据库管理系统是phpMyAdmin。
发布于 2016-04-11 21:56:09
我肯定会使用选项1-创建连接表'group_memberships‘-我已经使用了这种方法很多次,没有问题。不要忘记在新表'group_memberships‘上为列添加索引:'groupID’和'userID‘。
对于大量的数据,选项2是不可伸缩的,特别是当组有很多用户的时候。
更新:
关于索引的信息,这里有一个很好的(也是简短的)博客:https://blog.viaduct.io/mysql-indexes-primer/。
发布于 2016-04-11 22:04:33
我建议您使用选项1;其中有一个用于链接用户和组的映射表。
用户表将在User_ID上有PK。组表将在Group_ID上有PK。映射表将有User_ID(FK)和Group_ID(FK)。现在,您应该将这两列的PK放在一起。这将确保您没有重复的条目。
发布于 2016-04-11 22:07:08
在数据库术语中,您描述的是一种多到多的关系。一个用户可以属于多个组,并且组有多个用户(否则它们就不是“组”了!)
您的第一个想法,即group_memberships
表,是建立这种关系的公认的最佳方法。尽管您希望将它命名为users_groups
或类似的东西,以反映它与这两个表相关或关联的事实。最基本的是,这个关联表需要三列:
通过JOINing到user_id或group_id上的这个表,您可以从关系的任何一方找到相关的记录。您可以直接从SQL查询中执行此操作,而无需存储数组所需的任何额外代码。
https://stackoverflow.com/questions/36559909
复制相似问题