web-dev-qa-db-ja.com

主キーと代理キーの違いは何ですか?

私は多くのグーグルを検索しましたが、例で正確な直接的な答えを見つけることができませんでした。

このための例はより役立つでしょう。

38
Dom

主キーは、テーブル内のレコードを最も一意に識別する、選択したテーブル内の一意のキーです。レコードを更新または削除する必要がある場合、レコードを一意に識別する方法を知る必要があるため、すべてのテーブルに主キーが必要です。

代理キーは、人為的に生成されたキーです。レコードに本質的に自然キーがない場合(Personテーブルなど)、同じ日付に生まれた2人が同じ名前を持っている可能性があるため、またはログにレコードがある場合に便利です同じタイムスタンプを持つ2つのイベントが発生します)。ほとんどの場合、これらは自動的に増分するフィールドに整数として実装されるか、各レコードに対して自動的に生成されるGUIDとして表示されます。 ID番号はほとんどの場合、代理キーです。

ただし、主キーとは異なり、すべてのテーブルに代理キーが必要なわけではありません。アメリカの州をリストする表がある場合、それらのID番号は実際には必要ありません。状態の省略形を主キーコードとして使用できます。

代理キーの主な利点は、代理キーが一意であることを簡単に保証できることです。主な欠点は、それらに意味がないことです。たとえば、「28」がウィスコンシンであるという意味はありませんが、アドレステーブルの[状態]列に「WI」と表示されている場合、どの状態がどの状態であるかを調べる必要なく、どの状態について話しているかがわかりますテーブル。

62
Bacon Bits

代理キーは、行を一意に識別することを唯一の目的とする構成値です。通常、これは自動インクリメント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
)
6
tobypls

すべてのキーは、識別するものの代理として使用される識別子です。 E.F. Coddはsystem-assignedサロゲートの概念を次のように説明しました[1]:

データベースユーザーは、システムにサロゲートを生成または削除させることがありますが、その値を制御することも、その値を表示することもできません。

これは、一般に代理キーと呼ばれるものです。ただし、Coddはそのような機能がDBMSによって提供されると想定していたため、定義はすぐに問題になります。一般に、DBMSにはそのような機能はありません。キーは通常、少なくとも一部のDBMSユーザーには表示されます。明らかな理由から、キーは表示される必要があります。したがって、サロゲートの概念は使用法がわずかに変化しました。この用語は一般に、データ管理の専門家では、公開されず、識別子として使用されるキーを意味するために使用されますビジネスドメインこれは、キーがどのように生成されるか、またはキーがどのように「人工的に」認識されるかと本質的に無関係であることに注意してください。すべてのキーは、人間または機械によって発明された記号で構成されています。したがって、サロゲートという用語の唯一の重要な意味は、キーの作成方法や値とは関係なく、キーの使用方法に関係しています。

[1]データベースリレーショナルモデルを拡張してより多くの意味を取り込む、E.F。Codd、1979

3
nvogel

代理キーは通常、数値です。 SQL Server内で、Microsoftは、サロゲートキー値の生成に役立つIDプロパティを使用して列を定義できます。

PRIMARY KEY制約は、データベーステーブル内の各レコードを一意に識別します。主キーには、一意の値が含まれている必要があります。主キー列にNULL値を含めることはできません。ほとんどのテーブルには主キーが必要であり、各テーブルには主キーを1つだけ含めることができます。

http://www.databasejournal.com/features/mssql/article.php/3922066/SQL-Server-Natural-Key-Verses-Surrogate-Key.htm

1
Bishoy Frank

これは、さまざまな種類のキーを説明する素晴らしい治療法です。

http://www.agiledata.org/essays/keys.html

1
n8wrl