我试图注册一些用户的基本细节,如用户名/电子邮件,密码和他们各自的爱好,如阅读,体育,舞蹈等,稍后显示用户与类似的爱好。当前架构如下所示。

Users

 - id
 - email
 - password
 - country
 - hobbies_id

hobbies

 - id
 - user_id
 - sports(values true/false)
 - reading(values true/false)
 - dance(values true/false)

每个爱好都作为一列放在爱好表中。
如果我把爱好的数量从3个增加到20个,那么什么样的模式是最优化的呢?
另外,有人能帮我查询一下,选择有类似爱好/爱好的用户吗?例如,如果约翰喜欢阅读和运动,而金喜欢运动和舞蹈,那么他们就把运动作为一种共同的爱好。
提前谢谢。

最佳答案

根据@Madhur Bhaiya的评论,我将用3张表来说明这一点:

users
 - id
 - email
 - password
 - country

hobbies
 - id
 - name (sports, reading, dance, ...)

user_hobbies
 - user_id
 - hobbie_id

users表是用户的主表(每个用户一条记录)。
hobbies表是业余爱好的主表(每个业余爱好一条记录)。创建新爱好时,不需要创建新列,只需添加新行即可。
user_hobbies表将用户映射到爱好:它为每个user_id/hobbie_id元组包含一条记录。

关于mysql - 关系数据库结构,用于存储用户的多个爱好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58168241/

10-13 02:41