2

我无法弄清楚如何为我的在线选举应用程序创建唯一的键名。这是一组典型的相关实体:

  • 1 选举
  • 5名候选人
  • 100,000 名选民
  • 最多 100,000 票

出于此处所述的原因,我需要为每个 Voter 实体设置一个唯一的键名。电子邮件地址对于特定选举中的选民来说是唯一的,但不一定跨多次选举(因为同一选民可能是多次选举的一部分)。

如果选举是选民实体的父实体,那么将选民电子邮件与选举父实体结合使用就足以获得唯一密钥。由于我需要在更新 Voter 实体时使用事务(以确保选民不能多次投票),我想我不想使用实体组,因为根据docs一次只能更新一个 Voter 。

另一种解决方案可能是为表单的每个选民创建一个唯一的密钥:

E<election ID>_<voter email>

例如,

E1001_john@example.com

这是为每个 Voter 实体创建唯一键名的合理方法吗?

4

2 回答 2

3

仔细检查你的假设。事实上,有一种情况可能会妨碍 ID 的唯一性:

如果两个选民使用相同的电子邮件地址怎么办?我知道我的父母之间只有一个。实际上,您的 ID 会发生冲突。

有很多方法可以最大限度地减少碰撞。如果最坏的情况发生,您可以散列一些选民的信息。射击,您甚至可以散列创建 ID 的确切时间。

(嗯……我想我有点喜欢散列……)

最简单的解决方案?做数据库中人们对 ID 所做的事情:一个数字。每次添加新选民时,增加人数。您添加的第一个投票者的 ID 为 1,第二个投票者的 ID 为 2,依此类推。如果需要,可以将 id 转换为字符串。

但是,不要假设数据是唯一的。两个人可以有相同的姓名、街道地址、电子邮件地址或电话号码等。

希望能给你一些想法!

于 2011-07-18T00:54:44.113 回答
0

那应该是独一无二的。我自己可能会使用 GUID,并将其绑定到对投票会话和选民具有唯一约束的数据存储库,但这只是个人喜好。

于 2011-07-18T00:41:52.423 回答