2

電子メール アドレスを主キーとして使用する方法は? それを避けて、代わりに自動インクリメントされた ID 番号を使用する必要がありますか、それともエンジンはそれを処理できますか?

MySQL データベースですが、他のエンジンがこれをどのように処理するかに興味があります (特に PostgreSQL)。

4

5 に答える 5

4

かなり狭い一連の基準が満たされる場合にのみ、電子メール アドレスを使用することは完全に合理的です。

  • 電子メール アドレスは主要なエンティティであり、他のもの (たとえば、ユーザー アカウントなど) を識別しません。
  • テーブルへの FK 参照が比較的少ないか、結合を使用しない高速な FK ルックアップが重要です
  • メールアドレスは一切検証しません

つまり、電子メール アドレスを主キーとして使用することが適切であることはめったにありません。私が実際に考えることができる唯一の状況は、メール ストリームを処理するソフトウェアであり、個々の電子メール アドレスに関する統計を記録する必要がある場合です。

ユーザーの識別子として使用することを考えている場合は、使用しないでください

電子メール アドレス自体がプライマリ エンティティです

ユーザーアカウントのように、メールアドレスを使用して他の何かを識別するのではなく、メールアドレスに関するすべてのテーブルを使用します。たとえば、各アドレスとの間で送受信されたメッセージの数を追跡しているとします。メールアドレスで何か他のものを識別している場合は、それを主キーとして使用しないでください。完全に安定した小さくて単純な自然キーがない場合は、代理キーを使用します。名前とメールアドレスが変わります。

外部キー参照が比較的少ない

主キーとして電子メール アドレスを持つテーブルへの FK 参照があまりないか、FK を含むテーブルで非常に高速で結合のないルックアップが必要です。別のテーブルに参加して他のテーブルの値をテストするのではなく、値 (電子メール) を直接テーブルで検索すると、パフォーマンスが大幅に向上します。ここでの裏返しとして、生成された代理キーの代わりに電子メール アドレスを使用すると、テーブルに必要なストレージが増える (つまり、テーブルとインデックスが大きくて遅くなる) ため、外部キーを頻繁に検索することが本当に予想される場合にのみ価値があります。

メールアドレスを検証しない

メールアドレスに「有効」「無効」という概念があると、遅かれ早かれルールが変わり、メールアドレスを主キーにしていると悲惨な状況になります。

メールアドレスがおかしい

次の 3 つのメール アドレスは同じです。

user.name@DOMAIN.COM
user.name@DoMAIN.CoM
user.name@domain.com

しかし、これらの 3 つはすべて異なります。

user.name@domain.com
USER.NAME@domain.com
User.Name@domain.com

関連するRFCに従って。同意する MTA もあれば、大文字と小文字を区別せずに処理する MTA もあります。

うん。それらを PK として使用しないでください。

于 2013-11-24T01:31:14.917 に答える
1

自動増分主キーを使用します。この情報をユーザーに公開する必要はありません。キーが電子メール アドレスであるかのように視覚的に表すことができますが、内部的に一貫性があり、時間の経過とともに変化しない数値が必要です。

主キーは他のテーブルへのリンクに使用されることに注意してください。そのため、誰かが電子メール アドレスを変更した場合は、依存リンクもすべて更新する必要があります。これを正しく行うのは非常に困難です。

どの SQL データベースを使用しても問題ありません。それらはすべてほぼ同じように機能し、同様の制限があります。

于 2013-11-23T20:11:30.883 に答える
0

ビジネス情報を主キーとして使用せず、代わりに代理主キーを使用する重要な理由の 1 つは、外部キーのためです。誰かの電子メール アドレスを更新する必要があるとします。キー内のすべての情報を更新するのがどれほど大変なことか想像できますか? 外部キーが十分に厳密な場合、複製レコードを作成し、すべての子レコードを更新してから、元のレコードを削除する必要が生じる場合があります。代理主キー (通常は自動生成された整数) を使用する場合、1 つのレコードの電子メール アドレスを更新するよりも、取得するのははるかに困難です。

于 2013-11-23T20:16:09.270 に答える
0

キーを選択して設計するための賢明な基準は、シンプルさ、親しみやすさ、安定性です。電子メール アドレスは単純で使い慣れたものであり、比較的頻繁に変更されることはありません。多くの成功した Web サイトやシステムでは、ユーザーを識別するために一意の電子メール アドレスが必要です。電子メール アドレスは、多くの目的で完全に優れたキーになります。

電子メール アドレスが適切なキーになることを考えると、問題はそれをキーにするかどうかです。主キーの選択は、テーブルに複数のキーがあり、そのうちの 1 つを何らかの目的で「優先」として選択したい場合に発生します。何を主キーにするべきか、またはすべきでないかについての考えは、基本的に主観的で恣意的です。プライマリとして指定されたキーは、他のキーと形式や機能がまったく異なる必要はないため、そのような選択を行うための適切な理論的根拠はありません。人間の好みだけに基づいて、メールアドレスは、見慣れない無関係な増分番号よりも「より良い」主キーの選択を行う必要があります。

于 2013-11-23T22:47:50.230 に答える