我正在为一个新网站设计数据库,用户可以在该网站上选择许多他们喜欢的音乐流派。每个流派都有一个与之关联的 ID,因此如果约翰喜欢流行、摇滚和 R&B,他会喜欢 1、2 和 3。
将这些存储在用户表中的最佳方式是什么?
现在我有这样的:
genre_id | user_id
------------------
1,2,3 | 1
在 php 中,我在逗号分隔符上展开这些值,并以这种方式获取各个 id。但这显然不是正确的做法。
我知道我可以有一个名为“genre_to_user”的单独表,对于 John 喜欢的每种类型,我可以像这样在该表中输入一个条目:
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
为了获得 John 喜欢的所有内容,我可以执行 SELECT * FROM 'genre_to_user where user_id = 1
但我认为从长远来看,当该表中充满大量记录时,这不会非常有效。由于我将在同一页面上最多有 30 个用户的列表页面上为每个用户进行一次此计算。这些页面遍布整个网站。
那么什么是正确(并且有效)的方法呢?
此外,在 mysql 中是否有任何数据类型用于存储逗号分隔值,而不是仅仅将它们粘贴在 varchar 字段中?
最佳答案
您应该使用像您描述的 genre_to_user
这样的交叉引用表。这将使您的数据库更快地搜索记录。
不要太担心“大量的记录”,这就是数据库的用途:-)
关于php - 我应该如何将这些多个值存储在我的 MySQL 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10459663/