mysql - 用于存储用户多种爱好的关系数据库结构

标签 mysql sql node.js database foreign-keys

我正在尝试使用基本详细信息(如用户名/电子邮件、密码)和他们各自的爱好(如阅读、运动、舞蹈等)注册一些用户,然后显示具有相似爱好的用户。当前架构看起来像这样。

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/

相关文章:

php - mysql_fetch_array 仅打印第一个结果

mysql - 当表具有同名列时多重内连接

php - 计算从 PHP 中的 sql 查询返回的实例数

node.js - 无法从 ubuntu 16.04 LTS 卸载 Node

node.js - Alexa 请求技能生成器不等待响应生成器

mysql - 存储查询?

java - 删除父 manyToOne 注释时删除孤儿

c# - SqlConnection 在 using 语句中意外关闭

python - Django 分组依据

node.js - html 到文件缓存的模块