私は多くのグーグルを検索しましたが、例で正確な直接的な答えを見つけることができませんでした。
このための例はより役立つでしょう。
主キーは、テーブル内のレコードを最も一意に識別する、選択したテーブル内の一意のキーです。レコードを更新または削除する必要がある場合、レコードを一意に識別する方法を知る必要があるため、すべてのテーブルに主キーが必要です。
代理キーは、人為的に生成されたキーです。レコードに本質的に自然キーがない場合(Person
テーブルなど)、同じ日付に生まれた2人が同じ名前を持っている可能性があるため、またはログにレコードがある場合に便利です同じタイムスタンプを持つ2つのイベントが発生します)。ほとんどの場合、これらは自動的に増分するフィールドに整数として実装されるか、各レコードに対して自動的に生成されるGUIDとして表示されます。 ID番号はほとんどの場合、代理キーです。
ただし、主キーとは異なり、すべてのテーブルに代理キーが必要なわけではありません。アメリカの州をリストする表がある場合、それらのID番号は実際には必要ありません。状態の省略形を主キーコードとして使用できます。
代理キーの主な利点は、代理キーが一意であることを簡単に保証できることです。主な欠点は、それらに意味がないことです。たとえば、「28」がウィスコンシンであるという意味はありませんが、アドレステーブルの[状態]列に「WI」と表示されている場合、どの状態がどの状態であるかを調べる必要なく、どの状態について話しているかがわかりますテーブル。
代理キーは、行を一意に識別することを唯一の目的とする構成値です。通常、これは自動インクリメントIDで表されます。
サンプルコード:
CREATE TABLE Example
(
SurrogateKey INT IDENTITY(1,1) -- A surrogate key that increments automatically
)
主キーは、テーブルの識別列または列のセットです。 代理キーにすることができますまたはその他の列の一意の組み合わせ(複合キーなど)。すべての行で一意である必要があり、NULL
にはできません。
サンプルコード:
CREATE TABLE Example
(
PrimaryKey INT PRIMARY KEY -- A primary key is just an unique identifier
)
すべてのキーは、識別するものの代理として使用される識別子です。 E.F. Coddはsystem-assignedサロゲートの概念を次のように説明しました[1]:
データベースユーザーは、システムにサロゲートを生成または削除させることがありますが、その値を制御することも、その値を表示することもできません。
これは、一般に代理キーと呼ばれるものです。ただし、Coddはそのような機能がDBMSによって提供されると想定していたため、定義はすぐに問題になります。一般に、DBMSにはそのような機能はありません。キーは通常、少なくとも一部のDBMSユーザーには表示されます。明らかな理由から、キーは表示される必要があります。したがって、サロゲートの概念は使用法がわずかに変化しました。この用語は一般に、データ管理の専門家では、公開されず、識別子として使用されるキーを意味するために使用されますビジネスドメインこれは、キーがどのように生成されるか、またはキーがどのように「人工的に」認識されるかと本質的に無関係であることに注意してください。すべてのキーは、人間または機械によって発明された記号で構成されています。したがって、サロゲートという用語の唯一の重要な意味は、キーの作成方法や値とは関係なく、キーの使用方法に関係しています。
[1]データベースリレーショナルモデルを拡張してより多くの意味を取り込む、E.F。Codd、1979
代理キーは通常、数値です。 SQL Server内で、Microsoftは、サロゲートキー値の生成に役立つIDプロパティを使用して列を定義できます。
PRIMARY KEY制約は、データベーステーブル内の各レコードを一意に識別します。主キーには、一意の値が含まれている必要があります。主キー列にNULL値を含めることはできません。ほとんどのテーブルには主キーが必要であり、各テーブルには主キーを1つだけ含めることができます。
これは、さまざまな種類のキーを説明する素晴らしい治療法です。