2011-11-13 18 views
0

私が見たクレデンシャルテーブルの実装には、ユーザーを追跡するための自動認識IDがあります。しかし自動インクリメントIDの必要性

私は電子メールアドレスにより、各行の一意性を保証することができますよりも、私は、電子メールアドレスを使用して、必要に応じて、さらに私は、テーブルにアクセスすることができます...、MySQLのテーブルに挿入する前に、一意の電子メールアドレスを確認した場合..

誰にも問題がありますか?

私はこのアプローチに従わない理由を理解しようとしていますか?

答えて

2

これらの電子メールアドレスは4バイトをはるかに超えています。おそらく可変長のストレージエンジンではさらに悪化します。

また、2人のアカウントが必要な場合や、時間の経過とともに複数のメールアドレスが必要な場合もあります。

ケースフォールディングに関連する問題があります。

+0

大文字と小文字の区別は、大文字と小文字を比較して文字列を比較し、大文字小文字を気にせずに住所を入力できることを意味します。 –

+0

@ stack.userそれぞれのアドレスが一度格納されていればそうです。質問はそれらをユーザー識別子として使用することです。この場合、ユーザーを参照する必要がある他のすべてのテーブルに何度も格納されます。 –

2

他のテーブルにユーザーに関するデータがある場合、どのような外部キーとして使用しますか?彼らの電子メールアドレス?メールアドレスを変更したい場合はどうすればいいですか? 1つの1列の更新があったのは、今や巨大な混乱になります。

生成されたキーを使用すると、レコードとテーブルの関係から変更できるデータを切り離すことができます。

+0

@ stack.user.3可能ですが、サロゲートキーを変更することはできないため、サロゲートキーを使用することが一般的な良い方法です。 –

+1

スペースの引数にかかわらず、電子メールアドレスは固定された情報ではありません。テーブル間のリレーションを作成するために使用するデータは、それらが属する行にかなり固定されている必要があります。キー値として必要なものは何でも使用できますが、依存する行を更新するカスケード効果のために決して変更しないものを最適に選択する必要があります。メールアドレス(私にとって)はこの基準を満たしていません。 – Joe

関連する問題