Ruby on rails 什么是多对多关系?

Ruby on rails 什么是多对多关系?,ruby-on-rails,many-to-many,has-many-through,Ruby On Rails,Many To Many,Has Many Through,我对什么是多对多关系有点困惑。我想知道以下是否是一种多对多关系: 学校的学生有许多俱乐部。学校的俱乐部有很多学生。假设学生有很多属性:名字、姓氏、电话、年龄、电子邮件等。俱乐部只有一个属性:名字 当我创建一个新俱乐部时,我希望能够给俱乐部起一个名字和一个或多个学生。在创建俱乐部时,我希望该俱乐部与那些学生以及那些学生联系在一起 当我成为一名新学生时,我希望能够给学生一个名字、姓氏等,以及一个或多个俱乐部。在成为学生后,我希望该学生与那些俱乐部以及那些俱乐部联系起来 我还想在展示页面上展示俱乐部的

我对什么是多对多关系有点困惑。我想知道以下是否是一种多对多关系:

学校的学生有许多俱乐部。学校的俱乐部有很多学生。假设学生有很多属性:名字、姓氏、电话、年龄、电子邮件等。俱乐部只有一个属性:名字

当我创建一个新俱乐部时,我希望能够给俱乐部起一个名字和一个或多个学生。在创建俱乐部时,我希望该俱乐部与那些学生以及那些学生联系在一起

当我成为一名新学生时,我希望能够给学生一个名字、姓氏等,以及一个或多个俱乐部。在成为学生后,我希望该学生与那些俱乐部以及那些俱乐部联系起来

我还想在展示页面上展示俱乐部的学生和学生俱乐部

我已经读到,多对多关系是指当您有一个联接表,允许您访问结果学生和俱乐部的公共属性时,但在我的例子中没有公共属性


我在这里有多对多的关系吗?如果是这样的话,我是使用HABTM还是通过关系拥有很多?

实际上是的,你有共同的属性

你说过一个学生有很多俱乐部 一个俱乐部有很多学生

有什么共同点?学生和俱乐部

接下来要定义的是一个学生和一个俱乐部实际上是什么,你已经做过了

学生是名、姓等的组合。。。你没有说明的是学生的独特之处。一个俱乐部也必须被定义为独特的俱乐部。出于学术目的,你可以说这个名字使它独一无二,但在现实生活中,这可能不是最好的解决方案

通常出于性能目的,每个学生都有一个唯一的自动增量ID(是一个数字)。 俱乐部也可以做同样的事情

您创建了第三个表,它创建了多对多关系

在第三个表中,有两列。一列为学生的唯一索引,另一列为俱乐部的唯一索引。您只需在该表中添加一个条目,以便将学生与俱乐部联系起来

由于可以将多个学生分配给同一个俱乐部,也可以将多个俱乐部分配给同一个学生,因此存在多对多关系


编辑:如另一个答案中所述,第三个表还应将组合索引声明为唯一的,这样您就不会多次添加相同的条目。

实际上,是的,您有公共属性

你说过一个学生有很多俱乐部 一个俱乐部有很多学生

有什么共同点?学生和俱乐部

接下来要定义的是一个学生和一个俱乐部实际上是什么,你已经做过了

学生是名、姓等的组合。。。你没有说明的是学生的独特之处。一个俱乐部也必须被定义为独特的俱乐部。出于学术目的,你可以说这个名字使它独一无二,但在现实生活中,这可能不是最好的解决方案

通常出于性能目的,每个学生都有一个唯一的自动增量ID(是一个数字)。 俱乐部也可以做同样的事情

您创建了第三个表,它创建了多对多关系

在第三个表中,有两列。一列为学生的唯一索引,另一列为俱乐部的唯一索引。您只需在该表中添加一个条目,以便将学生与俱乐部联系起来

由于可以将多个学生分配给同一个俱乐部,也可以将多个俱乐部分配给同一个学生,因此存在多对多关系


编辑:如另一个答案中所述,您的第三个表还应将组合索引声明为唯一的,这样您就不会多次添加相同的条目。

是的,确实存在多对多关系,请使用HABTM。还有,为什么你说没有共同的属性?在这种情况下,俱乐部名称和学生名称绝对是常见的属性。

是的,确实存在多对多关系,请使用HABTM。还有,为什么你说没有共同的属性?在这种情况下,俱乐部名称和学生名称绝对是常见的属性。

您有多对多的属性

为每个表创建一个id,该id对于该表来说是唯一的,通常是一个自动递增的int

第三个表是连接/相交表,称之为X

如果学生拥有俱乐部,则在X中填入学生id和俱乐部id,反之亦然。它在表X中的两个id上都有一个唯一的复合键


组合将保证X中没有重复的行

您有多对多

为每个表创建一个id,该id对于该表来说是唯一的,通常是一个自动递增的int

第三个表是连接/相交表,称之为X

如果学生拥有俱乐部,则在X中填入学生id和俱乐部id,反之亦然。它在表X中的两个id上都有一个唯一的复合键


组合将保证X中没有重复的行

哇,谢谢!这更有意义。我现在对如何创建一个新的学生/俱乐部感到困惑,我该如何处理第三张桌子?以前,我使用了双方的一对多关系,我使用每个学生和俱乐部的ID作为强参数,并将它们保存在一个表单中。但是现在有了第三张桌子,我不知道该怎么办……好吧,整个想法是你希望能够将多个学生加入多个俱乐部。所以,通常你会有一个创建俱乐部的表格,一个创建学生的表格,以及一个将学生与俱乐部联系起来的表格。也就是说,一旦你解决了这个问题,你就可以聪明地创建一个接口来把事情联系起来