我必须在我的数据库中实现以下内容:
用户参与的活动。每个活动的名称最多可包含80个字符,并且只应存储不同的活动。也就是说,如果两个不同的用户喜欢“游泳”,那么活动“游泳”应该只作为一个字符串存储一次。
每个用户参与哪些活动。请注意,用户可能有多个爱好!
所以我必须为此目的实现表,我还必须根据需要对现有表进行任何修改,并实现所需的任何键和外键关系。
所有这些必须以最少的存储量存储,即您必须从MySQL手册中选择适当的数据类型。您可以假设将频繁添加新活动,几乎不会删除活动,并且不同活动的总数可能达到100,000。
所以我已经有一个'user'表,'user_id'作为我的主键。
我对此的解决方案:
创建一个名为'Activities'的表,并将'activity_id'作为PK(mediumint(5))和'activity'作为存储爱好(varchar(80))然后我可以创建另一个名为'Link'的表并使用'user_id'FK来自用户表和“活动”表中的“activity_id”FK,向用户显示他们喜欢的活动。
我对这个问题的处理方法是否正确?有没有其他方法可以做到这一点,以提高效率?
如果一个用户在外键表'Link'中追求多个活动,我该如何显示?
答案 0 :(得分:0)
你的想法是正确的,只有(?)方式......它被称为多对多关系。
重申一下你提议的是你将拥有一个用户表,这将有一个用户ID,然后是一个带有activityid的活动表。
要形成关系,您将拥有第3个表,为了性能起见,不需要主键,但是您应该索引两个列(userid和activityid)
在您输入活动名称的逻辑中,从活动表中提取所有记录,检查输入的值是否存在,如果没有添加到表中并返回新的活动ID,然后在链接活动数据的user_activity表中添加一个条目到用户ID。
如果它已经存在,只需添加一个将该活动ID链接到用户ID的条目。
所以你的方法是正确的,最后一个问题只是表明你应该谷歌“多对多”关系以获得更多信息,如果需要的话。