mysql中关系数据库表的最佳实践是什么?

时间:2010-06-15 19:51:39

标签: sql mysql relational-database

我知道,那里有很多关于mysql的信息。但我真的无法找到这个具体而简单的问题的答案:

假设我有两张桌子:

USERS (有许多字段,例如姓名,街道,电子邮件等)和 组 (也有许多领域)

关系是(我猜?)1:n,即一个用户可以是多个组的成员。

我不喜欢创建另一个名为USERS_GROUPS_REL的表。该表只有两个字段:

us_id(表USERS的唯一键)和 gr_id(表格组的唯一键)

在PHP中,我使用join进行查询。

这是“最佳做法”还是有更好的方法?

感谢任何暗示!


大家好,

感谢您的快速和有用的支持。知道我是以正确的方式建立我的mysql自信一点。 : - )

正如许多人评论的那样,我的例子是 1:n但是很多很多。就像一个快速的SQL课程: - )

这些是正确的条款吗? 1:n一对多 n:1对多 n:n多少?

4 个答案:

答案 0 :(得分:0)

这是最好的情况:) 在关系表中创建复合谓词主键是最佳解决方案:

ALTER TABLE USERS_GROUPS_REL ADD PRIMARY KEY(us_id, gr_id)

答案 1 :(得分:0)

这将是最好的做法。

在连接的两侧有两个表,中间有一个映射表(或链接表,或其他任何术语),它处理多对多关系(一个组有很多用户和一个用户可以属于许多组。

要提高性能,您应该为us_idgr_id制作映射表的复合键。您还可以在反向上创建索引,以便在需要按gr_id排序时,您也可以获得性能优势。

答案 2 :(得分:0)

一个用户可以属于多个组,一个组包含许多用户,因此它是多对多关系。

您描述它的方式是典型和正确的。多对多关系通常使用关联类关系表进行映射。

有时关系表有更多列。例如,用户可以是特定组的管理员。那么users_group_rel表也会有一个字段administrator

答案 3 :(得分:0)

您描述了多对多关系。使用该关系,许多用户可以成为许多组的成员。为了您的目的,这确实是正确的方法。

一对多和一对一关系不需要链接或交叉引用表(USERS_GROUPS_REL)。

您可能会发现本教程很有用:

http://www.tonymarston.net/php-mysql/many-to-many.html