sql - 赞成票和反对票的数据库
问题描述
如果我有一个包含一篇文章的数据库,并且我有一个支持投票的字段。我正在考虑创建一个 SQL 查询,我将首先获取当前的 upvotes 值,然后将值增加 1
但是,如果 5 个人同时点击 upvote 按钮会发生什么?
或者有没有更好的方法来做到这一点*
解决方案
我强烈的建议是在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))
);
然后,您可以根据需要汇总投票。您可以看到随时间推移的投票趋势。如果某人过去曾投票,您可以确保他们可以“取消投票”。
而且,插入到表中不会有不同用户相互干扰的风险。
缺点是总结结果需要更多时间。当问题出现时,您可以对其进行优化。
推荐阅读
- android - Facebook:从用户 ID 获取公开照片
- java - 在android中的下午4:00将时间戳字符串转换为DayName-Month-year?
- android - Android:仅由用户检测搜索栏更改
- docker - Kafka streams.allMetadata() 在 DOCKER 中返回空列表(交互式查询)
- javascript - 测试计算器的小数字符串
- ruby-on-rails - 我的模型中的实体/对象的路径与 route.rb 不同?
- delphi - Delphi 10 TDrawGrid - 如何正确刷新行?
- rest - Flutter 从服务器获取日语字符解码错误
- sql-server - SQL Server 导入向导和临时表
- roots-sage - 您如何部署(使用 Roots Trellis)到有 CloudFlare 代理的域?