MySQL表实现

MySQL表实现,mysql,database,database-design,Mysql,Database,Database Design,我必须在我的数据库中实现以下功能: 用户从事的活动。每个活动的名称最多可以包含80个字符,并且只能存储不同的活动。也就是说,如果两个不同的用户喜欢“游泳”,那么活动“游泳”只能作为字符串存储一次 每个用户都参与哪些活动。请注意,用户可以有多个爱好 因此,我必须为此目的实现表,如果需要,我还必须对现有表进行任何修改,并实现所需的任何键和外键关系 所有这些都必须以最小的存储量存储,即您必须从MySQL手册中选择适当的数据类型。您可以假设新活动将频繁添加,活动几乎永远不会被删除,不同活动的总数可能

我必须在我的数据库中实现以下功能:

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

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

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

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

因此,我已经有了一个“User”表,其中“User\u id”是我的主键

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

我对这个问题的态度正确吗?有没有其他方法可以提高效率


如果一个用户在外键表“Link”中执行多个活动,我将如何显示

你的想法是正确的,也是唯一的方法。。这叫做多对多关系

重申一下您的建议,您将有一个用户表,这将有一个userid,然后是一个带有activityid的活动表

要形成关系,您将有一个第三个表,出于性能考虑,它不需要主键,但是您应该为这两个列(userid和activityid)编制索引

在您的逻辑中,当有人输入活动名称时,从活动表中提取所有记录,检查输入的值是否存在,如果不存在,则添加到表中并获取新的activityid,然后向user_activity表中添加一个条目,将activityid链接到userid

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


因此,您的方法是正确的,最后一个问题只是指出,如果需要,您应该搜索“多对多”关系以获取更多信息。

||用户表:userId,userName,…|124; 124;活动表:activityId,activityName,…| | userActivity表:userId,activityId | |感谢您建议查找多对多关系!这正是我需要澄清的关于FK的…谢谢!