ユーザー情報を格納するテーブルがあります。
ユーザテーブルでは、ユーザ名は一意です。ユーザー名をプライマリキーにする必要があると思いますか、またはint型の代理キーを使用する必要がありますか?
文字列キーを使用するとパフォーマンスが悪くなりますか?SQL Server - テーブルの主キーの選択
答えて
サロゲート整数キーを使用します。
ユーザー名は頻繁に変更されることはありませんが、そうすることもできます。
パフォーマンスに関しては、問題があることがわかるまで、心配する必要はありません。
SQL Serverは、既定では主キー列にクラスタードインデックスを作成します。クラスタード・インデックスでワイド・キーを使用すると、クラスター化されていないすべてのインデックスにはそのワイド・キーも含まれます。
おそらくユーザ名を変更するのは非常に良い点です。 –
私の場合は、ユーザーにログイン名を変更させたくないと思っています。最初と最後の名前は変更できますが、登録された名前は変更できません。私はまだint pkと一緒に行くべきですか? –
説明のために:その場合、私は追加の列で終わっていると思いませんか?それは性能に影響しないだろうか?他の重要な側面を残しながら、パフォーマンスに集中しすぎているかもしれません。あなたは私が紛失しているかもしれないものについて光を当てることができますか?ありがとう! –
通常、主キーとしてintを使用します。これは、他のテーブルの外部キーとして使用する場合、スペースを節約するだけでなく、コンベンションに一部起因します。実際には、ユーザ名フィールドをプライマリとして使用しても、それを使って複数のテーブルに何千ものレコードを保存しなければ、パフォーマンスが低下することはありません。あなたのテーブルが小さいままであると思うなら、それは好みまでです。
私はアイデンティティのサロゲート主キーとクラスタを使用します。クラスタード・インデックスはすべてのインデックスに含まれ、狭く、静的で、増加する必要があります。
プライマリキーでは、ユーザー名をプライマリキーにすることができますが、外部キーはそれを参照するため、静的(ユーザー名ではありません)にすることもできます。だから私はユーザー名にクラスタ化されていないユニークなインデックスを作成します。 ID PKは自動的にNCIに含まれます。
私はアクセスが主にユーザー名(パスワードハッシュ、おそらく名前など)である使用パターンに応じて、同じインデックス(含まれている列と同じ)に他の列を含めます。しかし、私は実行計画をチェックし、プロファイラやインデックスチューニングウィザードを使用して、予想されるワークロードを確認します。
- 1. SQLテーブルの主キーの選択
- 2. SQL Serverの:主キー
- 3. SQL Serverの:選択挿入ソート順がに等しい挿入主キー
- 4. SQL Server 2012:IDキー、主キーも作成
- 5. パーティションSQL Serverの非主キー列の表
- 6. OracleおよびSQL Serverの主キー
- 7. は、主キーの選択:Postgresはインデックススキャン
- 8. を選択し、主キーの値
- 9. SQL Serverテーブルから日付を選択
- 10. SQL Server - 選択
- 11. キー値テーブルのSQL Server PIVOT
- 12. 同じテーブルの主キーと外部キー
- 13. SQL Server 2005の選択クエリ
- 14. SQL Server 2008の選択テーブルのすべてのカラム+カラム値
- 15. 選択(SQL Server 2008の)で2つのテーブルを結合
- 16. 2つのテーブルの主キー
- 17. テーブルの主キーの検出
- 18. Customedのテーブルの主キー
- 19. 選択テーブル(SQLツリーマージ)
- 20. select into not select SQL Server複数の列主キーのぼかし
- 21. SQL Server:複数のテーブルを選択し、NULLも表示する
- 22. 複数のテーブルを持つクエリをSQL Serverで選択する
- 23. SQL Server - テーブルから特定のIDを選択する
- 24. Sql Server 2008テーブルから一意の行を選択
- 25. Distinct Sum SQL Serverを選択
- 26. SQL Serverクエリ - 選択IDカウント()
- 27. Sql Server変更を選択
- 28. 選択するSQL Serverエディション
- 29. SQL Server別のテーブルの1つのテーブルのトップレコードを選択します。
- 30. PreparedStatement +主キー列のOracle 12c + ORA-01461の選択
これは、宗教的な戦争を開始する質問の種類です。 'username'が論理モデル内のキーである場合、それらは実装内のキー、すなわち少なくとも「ユニーク」、おそらくは「プライマリキー」となります。候補キーが複数ある場合は、すべてを実装する必要があり、どのキーを「プライマリ」にするかは任意です。あなたがサロゲートを追加することを選択した場合、最初に自然なキーが必要です(そして 'username'は妥当と思えますが)なぜ代理人が必要だと思うのか確かめてください:) – onedaywhen