在数据库中存储选举投票的最佳实践

Best Practice for Storing Election Votes in a Database

有没有一种好的方法可以存储与选举相关的去识别化投票数据,同时仍然确保人们不能投多票?存储此类数据的最佳做法是什么,尤其是在较长时间段内?

更多上下文:

我是一家娱乐俱乐部的少数网络管理员和数据库管理员之一。我们有超过 500 名成员。每年,我们都会举行一次选举,为新的董事会成员投票,选举数据存储在我们的数据库中。我们有以下存储超过十年投票数据的数据库表:

我们正在重写部分网站,包括与选举相关的内容,因此这似乎是一个很好的机会来更批判性地思考这个数据库结构以及它是否符合最佳实践。我主要关心的是存储与每次选举投票相关联的成员 ID。关注这种做法的另一个推动力是,今年 运行 的董事会成员之一恰好是 Web 管理员,他将拥有对数据库的完全访问权限。

归根结底,我相信这些人,我不太担心发生任何不好的事情。但我很好奇什么应该被视为处理此类数据的最佳实践。

虽然不直接相关,但我们现在使用 ASP.NET 会员资格(但很快就会切换到 ASP.NET 身份)。

我可能会采用这样的结构:

选举选举候选人几乎保持不变,

ElectionVotes 每次选举每个候选人每张选票存储一行,

MemberVotes 每次选举每个成员存储一行。

当会员投票时,您在 ElectionVotes 中为他们投票的候选人添加一行,在 MemberVotes 中为他们投票的候选人添加一行投票的成员(一个带有事务的简单存储过程应该很容易做到)。
您也不应在这两个表中存储诸如投票日期之类的内容,以防止按日期比较行。

这样,您就没有任何东西可以将投票的成员与他们投票给的候选人联系起来。