【发布时间】:2017-05-22 00:31:02
【问题描述】:
我正在为类似博客的网站上的帖子创建投票系统。
每个帖子都有一个评分,存储在数据库中。用户可以点击支持或反对,数据库中的数字会增加或减少。简单的东西。
但是如何检查当前用户是否已经投票?
我最初的想法是在数据库中为每个帖子创建两个额外的列,“UsersUp”和“UsersDown”,存储对每个帖子投赞成票和投反对票的用户名。我会检查用户名是否存在,如果存在,投票将被删除,而不是添加另一个投票。 我什至可以完全删除“评分”列并通过计算 UsersUp 中的用户名数量并减去 UsersDown 中的用户名数量来实现相同的效果。
我是否以错误的方式处理这个问题?
我不是要任何代码,只是要我如何实现这一点的理论。
我希望用户不能两次投赞成票或反对票,并且他们需要能够通过再次点击来撤回投票。
【问题讨论】:
-
如果您想尽量减少执行连接和繁重查询(“简单的东西”)的需要,您应该锁定已登录用户已投票的每个帖子。那么你的投票聚合应该确保在投票之前这个锁不存在,然后再进行
+1或-1。 -
我会在帖子表中还是在用户表中执行此操作?你可以说得更详细点吗?我会将用户名与帖子一起存储然后查询它们吗?
-
您在正确的轨道上,但没有上下两列,您只需要一个位列。事实上,看看 Stackoverflow 是如何使用 DataExplorer data.stackexchange.com 的,它有 db 架构
-
那么我如何将用户名“连接”到帖子 ID?我已经阅读了一对多数据模型,这是我需要的吗?我希望你明白我的困惑。我将在哪里/如何记录对帖子投票的人的用户名/ID/IP?另外,我不知道这个(链接),谢谢!
标签: c# database-design