有没有一种好方法可以存储与选举相关的去识别化投票数据,同时仍然确保人们不能投多张选票?存储此类数据的最佳实践是什么,尤其是在较长时间内?
更多背景:
我是休闲俱乐部为数不多的网络管理员和数据库管理员之一。我们有500多名会员。每年,我们都会举行选举以投票选出新的董事会成员,选举数据存储在我们的数据库中。我们有以下数据库表,存储了十多年的投票数据:
选举- :保存大选详细信息,例如特定选举中投票的开始和结束时间。
- 选举候选人:保存有关候选人、其简历等的信息。
- 选举投票:持有个人投票以及投票成员的会员 ID。
我们正在重写网站的某些部分,包括与选举相关的内容,因此这似乎是一个很好的机会,可以更批判性地思考这个数据库结构以及它是否符合最佳实践。我主要关心的是存储与每次选举投票相关的成员ID。关注这种做法的另一个推动力是,今年竞选董事会的成员之一恰好是网络管理员,将完全访问数据库。
归根结底,我相信这些人,我不太担心发生任何不好的事情。但我很好奇处理此类数据的最佳实践应该被视为什么。
虽然没有直接关系,但我们现在使用 ASP.NET 会员资格(但很快将切换到 ASP.NET 身份(。
我可能会选择这样的结构:
选举和选举候选人几乎保持不变,
选举投票每个候选人每次选举每张选票存储一行,
成员投票为每个成员每次选举存储一行。
当成员投票时,您可以在ElectionVote中为他们投票支持的候选人添加一行,在MemberVote中为投票的成员添加一行(带有事务的简单存储过程应该可以轻松做到这一点(。
您也不应该在这些表中存储投票日期之类的内容,以防止按日期比较行。
这样,您就没有任何内容可以将投票的成员与他们投票的候选人联系起来。