まず第一に、電子メールが「リソース」の一意の自然 ID であると仮定できるかどうかはわかりません。これは、新しいリソースごとに新しい電子メールを作成する必要があり、リソースは電子メールを読み取ることができないことを意味するためです。ケースを知っているので、それは正しいかもしれません。
だから質問に:
影響
- どのような場合でも、数値 ID の方が検索が高速です。しかし、文字列も非常に高速であるため (適切なインデックスを使用する場合)、ほとんどのアプリケーションには十分かもしれません。
- 数値 ID は使用するスペースが少なくなります (通常はこれが最も問題になりません)。
- 異種システムが関係している場合は、通常、文字列 ID が優先されます (例でわかるように、サービスは「リソース」に文字列 ID を提供します)。その理由の 1 つは、デバッグが容易であることです。たとえば、ユーザーはどのオブジェクトが参照されているかを一目で確認できます。もう 1 つの理由は、事実上すべてのシステムで文字列が最も一般的な分母であることです (ただし、エンコーディングの問題は存在します ^^)。
- データベースで多くの手動ジョブを実行する必要がある場合は、文字列が長くなる傾向があるため、数値をより速く入力できます。
- 自然な ID を使用する場合、ID が複数の列で構成されているのはかなり一般的なケースです。これにより、オブジェクト リレーショナル マッパーの構成が長くなり、エラーが発生しやすくなるのと同様に、SQL ステートメントが長くなり、エラーが発生しやすくなります。
- 通常、一意の識別子 (電子メールなど) がありますが、時間の経過とともに変化する可能性があります (人々は結婚します ^^)。そのような場合、いくつかの人工 ID も追加するのが一般的です (両方を持っています)。
あなたの場合、その文字列 ID を使用してこのサービスと通信する以外に選択肢 (?) がないため、少なくともこれも必要です。
ここで、私自身の意見として、デバッグは少し難しくなりますが、開発者として、数値 ID の作業と問題が少なくなると思います。データベース管理者として、列が 1 つしかない場合は、結合が複雑にならないため、列が String であるか Long であるかは関係ありません。文字列が不変である限り、たとえば変更されない限り、問題はありません。変更できる場合は、管理者として頭の痛い問題が発生することは間違いありません (そして、愚かな開発者は少しは気にしません ^^)。時間の経過とともに変更される可能性がある場合は、数値 ID を使用してください。