我正在创建一个评论网站,其中产品的某些详细信息是根据为特定产品撰写评论的用户的汇总响应确定的。例如,当用户评论 Macbook Air 产品时,除了给它评分 1-5 星并写下 300 字的笔记本电脑使用体验描述外,他还可以做一个简短的“调查”,其中包含复选框,他可以在其中选择是否该产品推荐用于:
- 办公套件
- 游戏
- 平面设计
- 看电影
例如,用户可以选中“办公套件”和“观看电影”的复选框。假设所有评论者对该 Macbook Air 产品的所有回复结果为“办公套件”为 100 票,为其他选项分别为 50 票、20 票和 10 票。由于“办公套件”选项得票最多,因此在Macbook Air的产品页面上,会注明:
推荐产品:Office 套件
您将如何为此设计数据库?我正在考虑建立一个单独的表,其中包含“rec_office_suite”、“rec_games”、“rec_graphic_design”、“rec_watching_movies”列,每个列都包含该选项的票数。每次审稿人提交审稿并填写小型调查时,数据库表都会更新为他选择增加 +1 的字段。
问题是,这最终可能会产生一个包含许多字段的表。这会是一个问题吗?
最佳答案
我建议将您在问题中提出的解决方案与大雄的方法结合起来。
大雄是正确的,因为使用链接表是存储数据的正确方法。这对于以后的扩展非常有用(只需添加新的类别记录)。我会这样开始。
但是,当要在每个产品页面上显示结果时,对数据库计算每个产品所有类别的所有投票的要求非常高。因此,将数据复制到某种缓存中以便快速读取是有意义的。不过,您对每个类别的表列的想法稍后并不容易扩展,并且可能会变得非常大。相反,我只是将投票存储在产品表的 MEDIUMTEXT(或类似)列中(可能采用 JSON 格式或序列化 PHP 数组),这非常易于阅读。仅当有人添加类别投票或添加新类别时才需要更新缓存。
通过使用这两者,您可以轻松访问产品/类别/投票数据,以便稍后进行更复杂的 SQL 查询,并快速查询产品页面。
希望这是有道理的,半梦半醒:)
关于php - 用于从用户提交的数据确定值(value)的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329048/