我正在为一个新网站设计数据库,用户可以在这里选择一些他们喜欢的音乐类型。每个类型都有一个与之相关的id,所以如果John喜欢Pop,Rock和R& B他喜欢1,2和3。
在users表中存储这些内容的最佳方法是什么?
现在我有这样的话:
genre_id | user_id
------------------
1,2,3 | 1
并在php中我在逗号分隔符上爆炸这些值并以这种方式获取单个ID。但这显然不是解决问题的正确方法。
我知道我可以有一个名为“genre_to_user”的单独表格,对于John喜欢的每种类型,我可以像这样输入该表格中的条目:
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
为了得到约翰喜欢的所有人,我可以做SELECT * FROM 'genre_to_user where user_id = 1
但是从长远来看,我不认为这会非常有效,因为那张桌子充满了大量的记录。因为我将在列表页面上为每个用户执行一次此计算,其中在同一页面上最多有30个用户。这些页面遍布整个网站。
那么正确(以及高效)的方式是什么呢?
此外,mysql中是否存在用于存储逗号分隔值的数据类型,而不仅仅是将它们粘贴在varchar字段中?
答案 0 :(得分:4)
您应该使用您描述的genre_to_user
之类的交叉引用表。这将使您的数据库更快地搜索记录。
不要过于担心“数量庞大的记录”,这就是数据库的用途: - )
答案 1 :(得分:0)
创建交叉引用表(如您描述的genre_to_user)具有允许反转搜索的额外好处。换句话说,您可以找出哪些用户或有多少用户的genre_id为1.