考虑这种情况, 一个用户可以有很多组, 组可以有很多用户
只有属于特定组的人才能使用属于该组的汽车
所以我不确定表格的外观
下面是表格
-- 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');
您能告诉哪种方法最好吗?
谢谢
答案 0 :(得分:0)
如果给定的汽车只能有一个小组关系,那么理论上您的第二个版本将起作用:
Cars (Name, Model, GroupId)
但是,一旦汽车可以与多个组相关联,这种方法就变得不可取。原因是我们将复制汽车的元数据:
SomeCar, SomeModel, Group1
SomeCar, SomeModel, Group2
通常,最好使用标准的交叉表方法,并使用一个表来仅跟踪汽车和组之间的关系:
SomeCar, Group1
SomeCar, Group2
然后,让Cars
表存在以存储每辆车的元数据,其中一辆车仅占用一条记录:
SomeCar, SomeModel, SomeOtherMetadata
答案 1 :(得分:0)
因为,
只有属于特定组的人才能使用属于该组的汽车
因此,您应该在组和汽车之间建立一对多关系。现在,为什么要这样做?这样做的直觉是,只有属于特定组的用户才能拥有汽车,因此汽车的依存关系取决于组。但是,由于汽车是组表的复合属性,因此您可以使用一对多关系来创建其owm表。 另一点是,当删除一个组时,与此组关联的所有汽车也应被删除(这是可选的,您还可以使用空外键,在这种情况下,如果您不想删除这些条目,它将是一个孤儿。在汽车表中)。