【发布时间】:2019-09-30 12:46:47
【问题描述】:
我正在尝试使用用户名/电子邮件、密码等基本详细信息以及他们各自的爱好(如阅读、运动、舞蹈等)来注册一些用户,然后再展示具有类似爱好的用户。当前架构看起来像这样。
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 个,最优化的架构是什么? 另外,有人可以帮我查询以选择具有相似爱好/爱好的用户吗?例如,如果 John 喜欢阅读和运动,而 Kim 喜欢运动和舞蹈,那么他们的共同爱好就是运动。
提前致谢。
【问题讨论】:
-
从用户表中删除
hobby_id。同样从爱好表中删除user_id。爱好本身就是一个实体,应该只存储与爱好相关的信息。创建用户和爱好之间的多对多映射表 -
创建多个“相似”(爱好实体)列是一种 SQL 反模式。理想情况下,爱好表格应该有两件事(根据您当前的要求):
hobby_id和hobby_name
标签: mysql sql node.js database foreign-keys