0

こんにちは私はあなたがユニークでなければならないレコードを持っているテーブルのベストプラクティスは何であるか疑問に思いました。これを行う2つの方法を見てきました。主キーを使用するか、列に一意性制約を追加するかです。

主キーを使用する場合、varchar(*)である「UserName」などの主キーを持つことは悪い習慣ですか?それは問題になるほどパフォーマンスに影響を与えますか?ユーザー名に一意の制約がある整数IDを使用するのが最善ですか?

PKとUniqueとして列を選択することに影響を与える可能性のある他のいくつかの要因があります。私はこれらについて正しいですか?

PK-列は変更する必要がないものにする必要があります

一意-列は後で変更される可能性があります

4

3 に答える 3

0

他の人がすでに議論しているように、それは良い考えかもしれないし、そうでないかもしれません。もう1つ詳細を追加しましょう...

PKとUniqueとして列を選択することに影響を与える可能性のある他のいくつかの要因があります。

主な違いは通常、クラスタリングに関連しています。ほとんどのDBMS(クラスタリングをサポート)は、自動的にPKをクラスタリングインデックスとして使用します。たとえば、MySQL / InnoDBは常にデータをクラスター化し、イベントでオフにすることはできませんが、MS SQL Serverはデフォルトでクラスター化します(オフにするには特別な構文を使用する必要があります)。

クラスタリングを使用することを選択した場合(またはDBMSによって強制された場合)、「太い」外部キーにつながる場合でも、通常はインデックスを少なくする方が適切です(たとえば、この記事の「クラスタリングの欠点」を参照)。

于 2012-06-11T15:31:33.320 に答える
0

ユーザー名は時間の経過とともに変化します。そのため、特にユーザー名に関連付けられた子レコードがある可能性が非常に高いため、PK の候補としては不適切です。たとえば、ユーザー名に本名のバリエーションが含まれているとします。その後、離婚して旧姓に戻った場合、最後にやりたいことは、結婚していた SOB を思い出して、ユーザー名を変更することです。過去 10 年間に作成した 200 万件の投稿も本当に変更しますか? そうは思いませんでした。

はい、文字列比較は遅くなりますが、データベースが取得するアクションの全体的な量に応じて、これが問題になる場合とそうでない場合があります。ユーザーが 200 人未満の小規模な企業データベースはおそらく問題にはなりませんが、何百万ものユーザーがいるインターネット サイトは問題になる可能性がはるかに高くなります。

于 2012-06-11T15:00:41.070 に答える
0

UserName に主キーを設定することは最善の方法ではありませんが、パフォーマンスは思ったほど悪くはありません。

最良のアイデアは、ID (INT) を PRIMARY KEY として使用し、UserName を UNIQUE として使用することです。

于 2012-06-11T13:48:50.807 に答える