Mysql 在数据库中建立多个表之间的关系
我有一个web应用程序,允许用户加入多个组 我有一个“用户”表,用于存储有关用户的详细信息(id、电子邮件、密码等),还有一个“组”表,用于存储有关可用组的详细信息(id、名称、组所有者) 我一直在研究存储组成员身份的最佳方法(即,哪些用户在哪个组中,记住他们可以是多个组的成员)-但是我仍然不确定最有效的解决方案是什么 你能推荐我:-Mysql 在数据库中建立多个表之间的关系,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我有一个web应用程序,允许用户加入多个组 我有一个“用户”表,用于存储有关用户的详细信息(id、电子邮件、密码等),还有一个“组”表,用于存储有关可用组的详细信息(id、名称、组所有者) 我一直在研究存储组成员身份的最佳方法(即,哪些用户在哪个组中,记住他们可以是多个组的成员)-但是我仍然不确定最有效的解决方案是什么 你能推荐我:- 创建第二个名为“group_memberships”的表,并将用户ID与相应的组ID一起存储 在“groups”表中的组详细信息旁边存储一个数组,其中包含其成员
- 创建第二个名为“group_memberships”的表,并将用户ID与相应的组ID一起存储
- 在“groups”表中的组详细信息旁边存储一个数组,其中包含其成员的用户ID
- 以不同的方式处理此任务
我使用的DBMS是phpMyAdmin。我肯定会选择选项1——创建连接表“组成员身份”——我多次使用这种方法,没有遇到任何问题不要忘记在新表“group_memberships”中为列“groupID”和“userID”添加索引 对于大量数据,选项2是不可伸缩的,尤其是当组有大量用户时 更新:
关于索引的信息,这里有一个好的(简短的)博客: 我肯定会选择选项1——创建连接表“group_memberships”——我多次使用这种方法,没有遇到任何问题不要忘记在新表“group_memberships”中为列“groupID”和“userID”添加索引 对于大量数据,选项2是不可伸缩的,尤其是当组有大量用户时 更新:
关于索引的信息,这里有一个好的(简短的)博客: 我建议您选择选项1;其中有一个用于链接用户和组的映射表 用户表将在用户ID上具有PK。 Groups表将在Group_ID上具有PK。 映射表将具有用户ID(FK)和组ID(FK)。 现在,这两列上的PK应该在一起。
这将确保您没有重复的条目。我建议您选择选项1;其中有一个用于链接用户和组的映射表 用户表将在用户ID上具有PK。 Groups表将在Group_ID上具有PK。 映射表将具有用户ID(FK)和组ID(FK)。 现在,这两列上的PK应该在一起。
这将确保您没有重复的条目。您所描述的在数据库术语中称为多对多关系。一个用户可以属于多个组,并且组中有多个用户(否则它们就不是“组”!) 您的第一个想法是
group\u memberships
表,它是公认的建立这种关系的最佳方式。尽管您希望将其命名为users\u groups
或类似名称,以反映它与这两个表相关或关联的事实。最基本的情况是,此关联表需要三列:
通过以用户id或组id连接到此表,您可以从关系的任何一方找到相关记录。您可以直接从SQL查询执行此操作,而无需任何其他代码(如存储数组所需)。您所描述的在数据库术语中称为多对多关系。一个用户可以属于多个组,并且组中有多个用户(否则它们就不是“组”!) 您的第一个想法是
group\u memberships
表,它是公认的建立这种关系的最佳方式。尽管您希望将其命名为users\u groups
或类似名称,以反映它与这两个表相关或关联的事实。最基本的情况是,此关联表需要三列:
通过以用户id或组id连接到此表,您可以从关系的任何一方找到相关记录。您可以从SQL查询中正确地执行此操作,而无需任何额外的代码,就像存储数组时所需的代码一样。第一个选项是正确的选择。实际上,它是用户表和组表的物化视图 只需将物化视图视为一个额外的表或冗余数据结构,将用户属性和组属性反规范化,以便快速搜索 因为如果我们没有视图,当我们查询组id以列出其所有用户时,我们必须过滤数百万用户以检查他/她是否在特定组中。这是一场表演噩梦 Mysql有很多工具可以非常高效地构建这个视图。您可以在此视图列上建立二级索引以进行快速搜索,例如,组id、组名称、用户id、用户名或其他您希望搜索的内容
祝你好运:-)第一个选择是正确的。实际上,它是用户表和组表的物化视图 只需将物化视图视为一个额外的表或冗余数据结构,将用户属性和组属性反规范化,以便快速搜索 因为如果我们没有视图,当我们查询组id以列出其所有用户时,我们必须过滤数百万用户以检查他/她是否在特定组中。这是一场表演噩梦 Mysql有很多工具可以非常高效地构建这个视图。您可以在此视图列上建立二级索引以进行快速搜索,例如,组id、组名称、用户id、用户名或其他您希望搜索的内容
祝您好运:-)第一种方法是在关系数据库中存储此类列表的公认方法。第一种方法是在关系数据库中存储此类列表的公认方法。它被称为“连接表”。我知道我离题了