2

オンライン選挙アプリのユニークなキー名を作成する方法がわかりません。Googleのアプリエンジンでユニークなキー名を作成する方法

  • 1選挙
  • 5候補
  • 10万有権者
  • 10万票

私は、各投票者エンティティの一意のキー名を必要とする:ここでは代表的な関連エンティティのセットです理由はhereと表記されています。電子メールアドレスは、特定の選挙の有権者にとって一意であるが、必ずしも複数の選挙にまたがっているわけではない(同じ投票者が複数の選挙の一部になる可能性があるため)。

選挙が投票者エンティティの親エンティティであった場合、選挙の親と組み合わせて投票者の電子メールを使用すると、一意のキーで十分です。私は投票者のエンティティを更新する際にトランザクションを使用する必要があるので(投票者が2回以上投票できないようにするために)、docsに従って一度に1人の投票者しか更新できないので、エンティティグループを使用したくないと思います。

別の解決策は、フォームの各有権者のためのユニークなキーを作成することができます。

E<election ID>_<voter email> 

例えば、

[email protected] 

は、各投票者のための一意のキー名を作成するために、その合理的な方法ですエンティティ?

+1

あなたの前の質問では、各投票者には一意のuuidフィールドが既にあります。キー名として使ってみませんか? –

+0

@Nick、私はPythonのUuidパッケージを使用してUUIDを作成しますが、私の理解では、それらは一意であることは保証されていません(非常に高い確率であります)。私は、彼らが選挙の中でユニークであることを確認するためにチェックを行いますが、他の選挙の間はチェックしません。私は、一意性を保証するために選挙ID(または類似のもの)を前もって追加する必要があると思います。 –

+0

@Nick、私はUUIDでもっと読んだだけで、衝突の可能性は非常に低く、私はそれについて心配すべきではないようです。 –

答えて

3

あなたの前提条件を再確認してください。そのままでは、IDの一意性を妨げる可能性がある状況があります。

2人の投票者が同じ電子メールアドレスを使用するとどうなりますか?私は両親の間に1つしかないことを知っています。そのままでは、あなたのIDは衝突するでしょう。

衝突を最小限に抑える方法があります。最悪が最悪になると、投票者の情報の一部をハッシュできます。あなたがIDを作成している正確な時刻をハッシュすることもできます。

最も簡単な解決策(フム...私は...私の種類のものをハッシュのように推測しますか)?データベースの人々がIDのために何をするかを数値で指定します。新しい投票者を追加するたびに、番号を増やしてください。あなたが追加する最初の投票者は1のIDを持ち、2番目のIDは2のIDを持ちます。必要な場合は、idを文字列に変換できます。

ただし、データが一意ではないと仮定しないでください。 2人の人が同じ名前、住所、電子メールアドレス、電話番号などを持つことができます。

あなたにはいくつかのアイデアがあります。

+0

私のアプリでは、他の理由から、各投票者に固有の電子メールアドレスが必要です。しかし、私は投票者の電子メールの代わりに1からNを使う考えが好きです。 –

0

これは一意である必要があります。私はおそらく、自分自身でGUIDを使用し、投票セッションと投票者に一意の制約を持つデータ・リポジトリに戻しますが、これは単なる個人的な好みです。

関連する問題