多对多关系能否与另一个表具有多对多关系?

时间:2019-06-26 04:25:48

标签: mysql foreign-keys many-to-many relational-database one-to-many

考虑这种情况, 一个用户可以有很多组,  组可以有很多用户

只有属于特定组的人才能使用属于该组的汽车

所以我不确定表格的外观

下面是表格

-- Creating a new User
INSERT INTO Users (UserLogin, UserPassword, UserName)
VALUES ('SomeUser', 'SecretPassword', 'UserName');

-- Creating a new Groups
INSERT INTO Groups (GroupName, GroupDescription)
VALUES ('GroupName', 'GroupDescription');

-- Finally, updating the junction
INSERT INTO UserGroup (UserId, GroupId)
VALUES ('UserId', 'GroupId');

考虑另一辆台式车

INSERT INTO Cars (Name, Model)
VALUES ('SomeCar', 'Model');

只有属于某个团体的人才能使用汽车S

那么汽车应该与用户组建立多对多关系吗?

INSERT INTO CarUserGroup (UserGroupId, CarId)
VALUES ('UserGroupId', 'CarId');

OR小组应该与汽车建立一对多关系吗?

INSERT INTO Cars (Name, Model, GroupId)
VALUES ('GroupId','SomeCar', 'Model');

您能告诉哪种方法最好吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果给定的汽车只能有一个小组关系,那么理论上您的第二个版本将起作用:

Cars (Name, Model, GroupId)

但是,一旦汽车可以与多个组相关联,这种方法就变得不可取。原因是我们将复制汽车的元数据:

SomeCar, SomeModel, Group1
SomeCar, SomeModel, Group2

通常,最好使用标准的交叉表方法,并使用一个表来仅跟踪汽车和组之间的关系:

SomeCar, Group1
SomeCar, Group2

然后,让Cars表存在以存储每辆车的元数据,其中一辆车仅占用一条记录:

SomeCar, SomeModel, SomeOtherMetadata

答案 1 :(得分:0)

因为,

  

只有属于特定组的人才能使用属于该组的汽车

因此,您应该在组和汽车之间建立一对多关系。现在,为什么要这样做?这样做的直觉是,只有属于特定组的用户才能拥有汽车,因此汽车的依存关系取决于组。但是,由于汽车是组表的复合属性,因此您可以使用一对多关系来创建其owm表。 另一点是,当删除一个组时,与此组关联的所有汽车也应被删除(这是可选的,您还可以使用空外键,在这种情况下,如果您不想删除这些条目,它将是一个孤儿。在汽车表中)。