2011-06-10 94 views
0

嗨我有一个方法来防止二次投票的方式在人们可以投票或投票下来评论的网站的问题。像Stackoverflow! :)防止第二票在评论投票

问题是我如何跟踪评论是否已被登录用户投票。让我们假设这是一个在线电子商务商店的产品评论。下面是我想:

  • 全部点评数据被存储在一个名为表 '评论'
  • 字段名:REVIEW_ID,PRODUCT_ID,USER_ID,标题,描述,TIME_CREATED,up_votes,down_votes,up_voters,down_voters
  • up_votes和down_votes包含的票数投票向上或向下
  • up_voters和down_voters包含的人谁或格式1101.1102.1103与USER_ID 1101,1102和1103
投票上下了用户的USER_ID

当一个人点击向上投票按钮时,系统将检查当前用户的user_id是否与up_voters中的任何人匹配。一个爆炸函数将把1101.1102.1103变成一个数组,in_array()将被用来检查用户是否已经投票。

有没有更好的方式去做这件事?

回答

5

该表格会为您提供恶梦。只要想想一个有1K up_voters的热门产品,你的领域将会是10K * 4个字符!不仅如此,它会阻碍你进行报告和研究数据等的能力。

我对你的需求了解不多,但是从我在表格中可以看到的东西,我会建议如下。

review 
user_id, product_id, type_of_vote, title, description, time_created 

使用上面的表格和使用USER_ID,PRODUCT_ID为重点

OR

review 
review_id, product_id, title, description, time_created 

vote 
review_id, user_id, type_of_vote 

有很多方法来设计这个表格N多。如果它是Operational Data Store(ODS)那么你可能想要normalize你的设计。如果是仓库,那么你可以考虑上面提到的第一张桌子。

+0

太棒了!我会把选票放在一个单独的表格中......我想知道什么时候扩展5000个产品,每个产品有50票,这是一个25K行的表格。不知道如果通过表搜索将会很慢 – Nyxynyx 2011-06-10 03:40:10

+0

明智地选择您的主键(PK)。基于PK的数据访问将快速,因为AFAIK大多数数据库在PK上使用唯一索引。您也可以将product_id移动到投票表。 – Lobo 2011-06-10 03:50:37