我不知道如何为我的在线选举应用程序创建唯一的关键名称。以下是一组典型的相关实体:
- <
- 1选举/gh><
- 5候选人/gh>
- 100000选民
- 高达100,000票
由于这里所述的原因,我需要为每个Voter实体使用唯一的键名。在一个特定的选举中,一个选民的电子邮件地址是唯一的,但在多个选举中不一定是唯一的(因为同一个选民可能是多个选举的一部分)。
如果选举是选民实体的父实体,那么将选民电子邮件与选举父实体结合使用将足以获得唯一密钥。由于我需要使用事务来更新Voter实体(以确保选民不能投票多次),我认为我不想使用实体组,因为根据文档,一次只能更新一个Voter。
另一个解决方案是为表单的每个投票人创建一个唯一的键:
E<election ID>_<voter email>
。
E1001_john@example.com
这是为每个Voter实体创建唯一键名的合理方法吗?
仔细检查你的假设。实际上,有一种情况可能会妨碍ID的唯一性:
如果两个选民使用相同的电子邮件地址怎么办?我知道我父母只有一个孩子。事实上,你的ID会冲突。
有很多方法可以最小化碰撞。如果发生最坏的情况,你可以对选民的一些信息进行篡改。你甚至可以散列创建ID的确切时间。
(嗯…我想我有点喜欢散列的东西…)
最简单的解决方案?就像数据库中的人对id做的那样:一个数字。每次添加一个新选民时,增加这个数字。您添加的第一个投票人的ID为1,第二个投票人的ID为2,以此类推。如果需要,可以将id转换为字符串。
但是,不要假设数据是唯一的。两个人可以有相同的名字,或街道地址,或电子邮件地址,或电话号码等。
希望能给你一些启发!
应该是唯一的。我自己可能会使用GUID,并将其绑定到对投票会话和投票人具有唯一约束的数据存储库,但这只是个人偏好。