0

我正在为一个新网站设计数据库,用户可以在其中选择一些他们最喜欢的音乐流派。每个流派都有一个与之关联的 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 字段中?

4

2 回答 2

4

您应该使用genre_to_user您描述的交叉引用表。这将使您的数据库更快地搜索记录。

不要太担心“大量记录”,这就是数据库的用途:-)

于 2012-05-05T07:02:18.237 回答
0

创建像您描述的genre_to_user 这样的交叉引用表具有允许反向搜索的额外好处。换句话说,您可以找出哪些用户或有多少用户的genre_id 为1。

于 2013-07-12T21:43:28.907 回答