投票系统存在逻辑问题

时间:2011-07-20 13:54:01

标签: java database voting voting-system

我正在寻找有关上下投票系统的帮助。

目前我有一张投票表,引用投票的用户,投票的用户和投票的信息(停车位)

CREATE TABLE parking_spots_votes(
vote_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

parking_spot_id INTEGER DEFAULT NULL,
    key  parking_spot_id_fk (parking_spot_id),
    FOREIGN KEY (parking_spot_id) REFERENCES parking_spots(id),

uploaded_by_user_id INTEGER DEFAULT NULL,
    key  user_id_fk (uploaded_by_user_id),
    FOREIGN KEY (uploaded_by_user_id) REFERENCES parking_angel_users(id),

vote_casted_user_id INTEGER DEFAULT NULL,
    key  vote_cast_user_id_fk (vote_casted_user_id),
    FOREIGN KEY (vote_casted_user_id) REFERENCES parking_angel_users(id),

vote_type INTEGER NOT NULL
 )

投票类型可以是0表示没有投票,1表示向上投票,2表示downvote

现在我遇到了一点逻辑上的麻烦。

例如

  1. 如果用户已经对parking_spot投票
  2. ,该怎么办?
  3. 我如何检查用户是否已经投票,如果他没有投票,但如果他已经投票,则表示已经投票。

  4. 如何更新用户(uploaded_by_user_id)分数。加上一个投票,减一投票。

  5. 所以一般的流程是,

    用户按下投票,服务器检查是否已经投票,如果是,那么你不能再投票。 如果没有则则vote_casted_user_id =当前用户,parking_spot_id =当前信息,uploaded_by_user_id =上传信息的人, 然后,upload_by_user分数将根据投票类型更新。

    我正在使用带有与MYSQL数据库的JDBC连接的java servlet。

    对我有什么想法?

2 个答案:

答案 0 :(得分:3)

  
      
  1. 如果用户已经对parking_spot投票怎么办?
  2.   
  3. 我如何检查用户是否已经投票,如果他没有插入,但如果他已经投票,则表示已经投票。
  4.   

这些基本上是同一个问题:如何测试用户是否已经对parking_spot投票?好吧,只需运行一个查询来获取parking_spot_id和vote_casted_user_id匹配的记录。

  

如何更新用户(uploaded_by_user_id)分数。加上一个投票,减一投票?

如果不是太麻烦,我会将vote_type的值更改为+1表示upvote,-1表示downvote。那么这只是SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

的问题

我希望这会有所帮助

答案 1 :(得分:1)

您可以考虑使用parking_spot_id,uploaded_user_id,casted_user_id设置主键

所以当同一个用户对同一个上传用户的同一停车位进行投票时,您可以捕获异常并处理“您已经投票了!”

如果你不喜欢这个 您可以通过编写自己的控制机制来处理进程

在保存投票之前写一个选择,用于获取记录的计数与parking_spot_id,uploaded_user_id,casted_user_id如果计数大于0这意味着已经有投票然后不保存并给出您的消息。否则保存您的投票并选择用户的得分通过投票增加并更新记录。

希望这有帮助。