我知道,那里有很多关于mysql的信息。但我真的无法找到这个具体而简单的问题的答案:
假设我有两张桌子:
USERS (有许多字段,例如姓名,街道,电子邮件等)和 组 (也有许多领域)
关系是(我猜?)1:n,即一个用户可以是多个组的成员。
我不喜欢创建另一个名为USERS_GROUPS_REL的表。该表只有两个字段:
us_id(表USERS的唯一键)和 gr_id(表格组的唯一键)
在PHP中,我使用join进行查询。
这是“最佳做法”还是有更好的方法?
感谢任何暗示!
大家好,
感谢您的快速和有用的支持。知道我是以正确的方式建立我的mysql自信一点。 : - )
正如许多人评论的那样,我的例子是不 1:n但是很多很多。就像一个快速的SQL课程: - )
这些是正确的条款吗? 1:n一对多 n:1对多 n:n多少?
答案 0 :(得分:0)
这是最好的情况:) 在关系表中创建复合谓词主键是最佳解决方案:
ALTER TABLE USERS_GROUPS_REL ADD PRIMARY KEY(us_id, gr_id)
答案 1 :(得分:0)
这将是最好的做法。
在连接的两侧有两个表,中间有一个映射表(或链接表,或其他任何术语),它处理多对多关系(一个组有很多用户和一个用户可以属于许多组。
要提高性能,您应该为us_id
和gr_id
制作映射表的复合键。您还可以在反向上创建索引,以便在需要按gr_id
排序时,您也可以获得性能优势。
答案 2 :(得分:0)
一个用户可以属于多个组,一个组包含许多用户,因此它是多对多关系。
您描述它的方式是典型和正确的。多对多关系通常使用关联类或关系表进行映射。
有时关系表有更多列。例如,用户可以是特定组的管理员。那么users_group_rel表也会有一个字段administrator
。
答案 3 :(得分:0)
您描述了多对多关系。使用该关系,许多用户可以成为许多组的成员。为了您的目的,这确实是正确的方法。
一对多和一对一关系不需要链接或交叉引用表(USERS_GROUPS_REL)。
您可能会发现本教程很有用: