web-dev-qa-db-ja.com

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

SQL Server dbでは、主キーとID列の違いは何ですか?列は、インデントなしで主キーになることができます。ただし、列を主キーにしないとIDにすることはできません。

違いに加えて、PKとIdentityカラムは、PKカラムだけではできないことを提供しますか?

編集:おっと。以下で指摘し、私が確認したように、列はPKでなくてもIDになります。これをテストしたとき、私の列の型は文字列であり、IDに設定できませんでした。理にかなっています。

61
DenaliHardtail

列は、PKでなくても間違いなくIDになります。

IDは、単に自動増加する列です。

主キーは、行を定義する一意の列です。

これら2つはよく一緒に使用されますが、そうである必要はありません。

77
Joe

Joeが上記のWHATに正しく答えたので、この答えは、WHAT IDよりもIDおよびprimay keyの方が多くなっています。

IDは、SQLが制御する値です。アイデンティティは行関数です。少なくともSQL Serverでは、値が連続的に増加または減少します。変更しないでください。値のギャップは無視してください。 ID値は、値が重複しないため、テーブルBをテーブルAにリンクするのに非常に役立ちます。どの場合でも、IDはクラスター化インデックスに最適な選択ではありません。テーブルに監査データが含まれている場合、日付のレコードは連続しているため、「今日と4日前の間に何が起こったのか」という質問に対する答えを表示するため、発生した日にクラスター化インデックスを作成する方がよい場合がありますデータページ。

主キーは、行の列を一意にします。 Primayキーは列関数です。 1つのテーブルに定義できるプライマリキーは1つだけですが、プライマリキーをシミュレートする複数の一意のインデックスを作成できます。主キーのクラスタリングが常に正しい選択とは限りません。電話帳を検討してください。電話帳がprimayキー(電話番号)によってクラスター化されている場合、「First Street」の電話番号を返すクエリは非常にコストがかかります。

IDと主キーについて従う一般的な規則は次のとおりです。

  1. ID列を常に使用する
  2. 範囲検索で使用される列にクラスター化インデックスを作成します
  3. クラスター化インデックスは他のすべてのインデックスの最後に追加されるため、クラスター化インデックスを狭くしてください
  4. プライマリ値と一意のインデックスを作成して、重複する値を拒否します
  5. 狭いキーの方が良い
  6. 結合で使用されるすべての列にインデックスを作成します

これらは私の一般的なルールです。

12
RC_Cleland

主キー(候補キーとも呼ばれます)は、一意性と最小性のプロパティを持つ属性のセットです。つまり、キー列は一意であるように制約されます。つまり、DBMSは、2つの行がこれらの属性に対して同じ値のセットを持つことを許可しません。

IDENTITYプロパティは、列の自動インクリメントのデフォルト値を効果的に作成します。ただし、その列は一意である必要はないため、IDENTITY列は必ずしもキーではありません。

ただし、IDENTITY列は通常、キーとして使用することを目的としているため、通常、重複が許可されないようにするための一意性制約があります。

8
nvogel

フィードバックに基づいて作成された編集

キーは行に固有です。行を識別する方法です。行には、なし、1つ、または複数のキーがあります。これらのキーは、1つ以上の列で構成されます。

キーは一意の制約を持つインデックスです。これにより、非キーインデックスと区別されます。

複数列を持つインデックスは「複合インデックス」と呼ばれます。

従来、主キーは行を一意に識別するメインキーと見なされていました。これらの1つだけがあります。

テーブルの設計によっては、主キーがない場合があります。

主キーとは、まさに「主キー」です。行の一意のIDを指定する主な要素です。テーブルの設計によっては、これは誤った名前になる場合があり、複数のキーが一意性を表します。

SQL Serverでは、主キーがクラスター化される場合があります。これは、残りの列がインデックスのリーフレベルでこのキーに関連付けられることを意味します。つまり、SQL Serverがキーを検出すると、行も検出します(明確にするために、これはclusteredアスペクトのためです)。

ID列は、単純に行の一意のIDを生成する方法です。

これら2つはしばしば一緒に使用されますが、これは要件ではありません。

1
IamIC

IDENTITYは、整数だけでなく、スケールが0の任意の数値データ型でも使用できます

主キーはスケールを持つことができますが、必須ではありません。

IDENTITYをPRIMARY KEYまたはUNIQUE制約と組み合わせて、シンプルな一意の行識別子を提供できます

0
Nikki

一意性に重点を置いた主キーは、同じ列のすべてのレコードの重複値を回避しますが、IDは、データを挿入せずに列の数値を増やします。両方の機能は、単一の列または異なる列にあります。

0
Shaahin