2009-12-01 7 views
16

私は友人から語られました:データベース設計の主キーとしてユーザー名を使用するのは悪いですか?

どのようなユニークなキーを使用しますか?私はあなたが 全体のユーザー名を保存していないと願っています ---これはあまりにも多くのテーブルスペースを使います!それぞれ (一意の)userNAMEに一意のユーザーIDを割り当て、このユーザーIDを保存します。 (INTEGER UNSIGNED auto_incrementまたはBIGINT UNSIGNED auto_increment)である必要があります。参照

FOREIGN KEY(userID)を作成 に忘れてはいけないユーザーIDを使用して、すべてのテーブル に usertableuserID)を参照。

上記の記述は正しいですか?なぜ、なぜそうではないのですか?

答えて

36

プライマリキーは変更できないので、彼は正しいと思いますが、usernameは変更できます。したがって、変更されないためuseridを使用する必要があります。

+2

プライマリキーは変更できません。または、それは "プライマリ"ではありません。キーは決して変更できないことを保証するために、システムで割り当てられるべきです。他のフィールド(名前など)は一意なインデックスを持つことができますが、定義によっては主キーにすることはできません。 –

+0

アプリケーションは、プライマリキーとしていくつかのフィールドを指定しているため、変更はありません。アプリケーションは後で変更することができ、本来ユニークで変更なしのフィールドを複製または変更できるようにすることができます。これがここのポイントです。 –

+1

ジョインテーブルについても同じですか?つまり、主キーの組み合わせが変更される可能性があるため、結合テーブルのすべてのエントリのIDを作成する必要がありますか? –

13

彼は間違った理由のために正しいです。テーブルスペースは、ユーザーの名前を変更したり、ユニークでなくても(スタックオーバーフローのようなユニークなユーザー名が必要ないアプリケーションを想像することができます)、アプリが大規模なリファクタリングを必要とすることを、他の(整数PK)ケースの軽い変更ではなく、データの移行です。

関連する問題