【问题标题】:Best way mysql storing votes with php voting sytemmysql用php投票系统存储投票的最佳方式
【发布时间】:2011-05-30 15:26:33
【问题描述】:

你好 我有一个带有评级表的 php 投票脚本,用于多个类别 文章、图像和 cmets

登录用户只能评价喜欢它或不喜欢它

存储用户评分的最佳方式应该是像这样将它们存储在长文本中

54654,5145463,19993,3215,69445 

或创建一个将 rate_id 与 user_id 链接的新表

对脚本和mysql性能有什么影响

rate_id     int(11) unsigned    NO  PRI     NULL    auto_increment
rate_for_id     int(11) unsigned    NO NULL      
rate_for    enum('article','image','comment')   NO NULL      
liked_it    int(5) unsigned     NO NULL      
disliked_it     int(5) unsigned     NO NULL      
users_rated     longtext    NO      NULL    

【问题讨论】:

  • 最好用所有投票创建新表,所以 1 行 - 1 个用户投票。您将能够更灵活地操作数据。虽然您没有任何问题,但无需考虑性能。我没有把它作为答案,因为没有 BEST 解决方案。这取决于...
  • 我会使用“foreign_key”选项(它们为此目的而存在)所以我想这是连接相关数据的正确方法。我还说性能取决于你的数据量将处理但对于中小型环境

标签: php mysql voting


【解决方案1】:

一定要把它做成一张单独的桌子。在单个字段中存储多个值几乎总是糟糕的设计,并且使得以后难以处理。例如要检查某人是否已经投票,您必须在“一体式”字段中进行子字符串搜索。而如果您使用单独的 user_votes 表,您只需检查记录是否存在。

性能影响很难量化。这是非常情境化的,并且取决于硬件/软件。尝试这两种方法,看看哪种方法更适合您的情况,但我猜这将是单独的表格选项获胜。

【讨论】:

    【解决方案2】:

    在同一字段中存储多个值的问题在于它会使您的数据库不规范,从而使您更难提取数据。例如,当你需要选择一个有某个like_it的ID的记录(比如,获取这个ID喜欢的所有主题),你并不能真正得到它,因为它混合了很多其他的值。

    因此,为了使您的数据库标准化,我强烈建议您将其分离到另一个表中,以便您可以更轻松地提取数据以满足以后的任何需求。这就是关系数据库的意义所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多