MySQL - 表实现

时间:2012-08-13 04:19:03

标签: mysql database database-design

我必须在我的数据库中实现以下内容:

  • 用户参与的活动。每个活动的名称最多可包含80个字符,并且只应存储不同的活动。也就是说,如果两个不同的用户喜欢“游泳”,那么活动“游泳”应该只作为一个字符串存储一次。

  • 每个用户参与哪些活动。请注意,用户可能有多个爱好!

所以我必须为此目的实现表,我还必须根据需要对现有表进行任何修改,并实现所需的任何键和外键关系。

所有这些必须以最少的存储量存储,即您必须从MySQL手册中选择适当的数据类型。您可以假设将频繁添加新活动,几乎不会删除活动,并且不同活动的总数可能达到100,000。

所以我已经有一个'user'表,'user_id'作为我的主键。

我对此的解决方案:
创建一个名为'Activities'的表,并将'activity_id'作为PK(mediumint(5))和'activity'作为存储爱好(varchar(80))然后我可以创建另一个名为'Link'的表并使用'user_id'FK来自用户表和“活动”表中的“activity_id”FK,向用户显示他们喜欢的活动。

我对这个问题的处理方法是否正确?有没有其他方法可以做到这一点,以提高效率?

如果一个用户在外键表'Link'中追求多个活动,我该如何显示?

1 个答案:

答案 0 :(得分:0)

你的想法是正确的,只有(?)方式......它被称为多对多关系。

重申一下你提议的是你将拥有一个用户表,这将有一个用户ID,然后是一个带有activityid的活动表。

要形成关系,您将拥有第3个表,为了性能起见,不需要主键,但是您应该索引两个列(userid和activityid)

在您输入活动名称的逻辑中,从活动表中提取所有记录,检查输入的值是否存在,如果没有添加到表中并返回新的活动ID,然后在链接活动数据的user_activity表中添加一个条目到用户ID。

如果它已经存在,只需添加一个将该活动ID链接到用户ID的条目。

所以你的方法是正确的,最后一个问题只是表明你应该谷歌“多对多”关系以获得更多信息,如果需要的话。