テーブルの主キーとしてユーザー ID とユーザー名のどちらを使用する方がよいかについて、多くの議論を見てきました。userid を使用すると、必要に応じて後でユーザー名を柔軟に変更できます。セキュリティを実装する方法でもあります。ただし、ユーザー名も一意の識別子です。
ユーザー ID を主キーとして選択した場合、ユーザー名が一意の値になるように強制するにはどうすればよいですか?
ユーザー名を選択する場合、どのような問題に注意する必要がありますか?
テーブルの主キーとしてユーザー ID とユーザー名のどちらを使用する方がよいかについて、多くの議論を見てきました。userid を使用すると、必要に応じて後でユーザー名を柔軟に変更できます。セキュリティを実装する方法でもあります。ただし、ユーザー名も一意の識別子です。
ユーザー ID を主キーとして選択した場合、ユーザー名が一意の値になるように強制するにはどうすればよいですか?
ユーザー名を選択する場合、どのような問題に注意する必要がありますか?
このユーザーレコードを参照する他のテーブルが存在するUserId
ため、として宣言します。これにより、制約を適用するのに役立ちます。PRIMARY KEY
UserId
FOREIGN KEY
ユーザー名を一意にする必要がある場合は、それをNON NULL
列として宣言し、UNIQUE KEY
制約を定義します。このプロパティは、列の制約NON NULL
によって許可される単一の null 値を防ぎます。UNIQUE KEY
したがって、UserName でのこの設定は、PRIMARY KEY
.
これは私自身の観点からです。
これは常に変更できないためUserID
、データ型 int (または stringの場合もあります) をテーブルの主キーとして選択します。また、変更できないため、参照している一部の外部キーには問題はありません。
私が選ばなかった理由はUsername
、これはユニークではありますが、ある時点で変更される可能性があるからです. それを参照している外部キーが既に存在する場合、そのユーザー名は、それらのキーまたはレコードが最初に削除または削除されるまで、まったく変更できません。
意味的には、少なくとも私の耳には、useridは人為的に作成された値、おそらく人工的な主キーのように聞こえますが、usernameは自然でユーザーフレンドリーな (構成要素の) 自然な主キーのように聞こえます。どちらかの用語を逆の意味で使用すると、プログラマーとユーザーが混乱する可能性があり、将来的に微妙なバグが発生する可能性があります。
ユーザー名に一意の値を強制する最良の方法は何ですか?
ユニークなインデックスを作成します。
ユーザー名を選択する場合、どのような問題に注意する必要がありますか?
ユーザーがいつでも自分のユーザー名を (一意である限り) 変更できるようにしますか? はいの場合は、生成したユーザー ID を使用します。それ以外の場合は、選択したユーザー名を使用してください。
最初の質問については、UNIQUE
制約は最新の RDBMS のほとんどで使用できます。アプリケーションレベルでも実装できます。
2 番目の質問については、明らかな問題は見当たりません。UserNames は、一般的にエンド ユーザーに知られています。ただし、多数のユーザーがいて、ユーザー名フィールドの最大長が大きい場合、インデックス作成は int 型のユーザー ID フィールドほど効率的ではない可能性があります。