我正在为一个新网站设计数据库,用户可以在其中选择一些他们最喜欢的音乐流派。每个流派都有一个与之关联的 id,所以如果 John 喜欢 Pop、Rock 和 R&B,他会喜欢 1、2 和 3。
将这些存储在用户表中的最佳方法是什么?
现在我有他们这样的:
genre_id | user_id
------------------
1,2,3 | 1
在php中,我在逗号分隔符上分解这些值并以这种方式获取各个ID。但这显然不是正确的做法。
我知道我可以有一个名为“genre_to_user”的单独表,对于约翰喜欢的每种类型,我都可以在该表中输入一个条目,如下所示:
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
为了得到约翰喜欢的所有东西,我可以做一个SELECT * FROM 'genre_to_user where user_id = 1
但是我认为从长远来看这不会非常有效,因为该表充满了大量的记录。因为我将在同一页面上最多有 30 个用户的列表页面上为每个用户进行一次计算。这些页面遍布整个网站。
那么解决这个问题的正确(和有效)方法是什么?
此外,mysql 中是否有任何数据类型用于存储逗号分隔的值,而不仅仅是将它们粘贴在 varchar 字段中?