首页 > 解决方案 > 赞成票和反对票的数据库

问题描述

如果我有一个包含一篇文章的数据库,并且我有一个支持投票的字段。我正在考虑创建一个 SQL 查询,我将首先获取当前的 upvotes 值,然后将值增加 1

但是,如果 5 个人同时点击 upvote 按钮会发生什么?

或者有没有更好的方法来做到这一点*

标签: sqldatabase

解决方案


我强烈的建议是在votes表格中记录每一个赞成和反对票:

create table votes (
    votes_id <autoincrement> primary key,
    user_id int references users(user_id),  -- whodunnit
    topic_id int references topics(topic_id),  -- what they're voting on
    inc int,
    created_at datetime default current_datetime,
    check (inc in (-1, 1))
);

然后,您可以根据需要汇总投票。您可以看到随时间推移的投票趋势。如果某人过去曾投票,您可以确保他们可以“取消投票”。

而且,插入到表中不会有不同用户相互干扰的风险。

缺点是总结结果需要更多时间。当问题出现时,您可以对其进行优化。


推荐阅读