主キーの代わりにIDを使用することをお勧めしますか?


11

私たちは宣言できIdentityようにid_numそれはとてもid_numユニークな番号の増分を持つことになります。

CREATE TABLE new_employees
(
  id_num int IDENTITY(1,1),
  fname varchar (20),
  minit char(1),
  lname varchar(30)
)

各行に一意の番号が提供さIdentityれているPrimary keyため、の代わりに使用することをお勧めしますIdentityか?


なぜこれを行う必要があるのですか?テーブル内の1つの主キーであることが望ましいため、自動的にクラスターインデックスが作成され、最適化に役立ちます。
KuldipMCA 2013

4
いいえ、(PKの代替としてではなく)IDENTITY 主キーとして使用することをお勧めします。これは非常に優れた非常に効率的な主キー(デフォルトではSQL Serverのクラスタリングキーでもあります)です。幅が狭く、通常は静的で、通常は一意です(ID仕様をいじらない限り)。増加
marc_s 2013

回答:


23

Identity columnsPrimary Keys2つの非常に異なるものです。アンはIdentity column自動インクリメント番号を提供します。それだけです。Primary Key(少なくともSQL Serverの)保証が一意性というユニーク制約であり、通常は(常にではない)クラスタ化されたキー。MS SQL Serverでは、これもインデックスです(一部のRDBMSでは、それらはそれほど密接に関連付けられていません)。インデックスとして、より高速な検索などを提供します。財が存在しない場合にIdentity columns、頻繁に使用されますが、代用ではありません。Primary Keynatural key


1
SQL Serverでは、非クラスター化インデックスにリーフレベルの主キーが含まれています。自然キーを主キーとして指定すると、インデックスが非常に大きくなります。
Andomar 2013

2
@Andomar PKは論理エンティティです。PKのサポートインデックスは物理的です。また、非クラスター化インデックスはPKをサポートできますが、必ずしもクラスター化インデックスである必要はありません。したがって、PKのインデックスがNCIである場合、ステートメントは正しくありません。これは、NCIのリーフレベルでのクラスター化インデックスキーです。
Thomas Stringer 2013

@ThomasStringer:そうだね、私のコメントはclustered index keyそれが言うところを読むべきだprimary key
Andomar 2013

たぶん。自然キーは整数でもかまいません。その場合、違いはありません。人工キーと自然キーで表示される引数の数は驚異的です。いつかウェブ検索を試してみてください:)それはたまたま人工キーの引数の1つです。
ケネスフィッシャー

5

アイデンティティは一意の値を保証しないため、そうではありません。IDプロパティはバイパスできますSET IDENTITY_INSERT <schema>.<table> ON(SQL Serverでは、使用しているRDBMSを指定していません)。

主キー制約(および一意制約)では、一意インデックスを使用して一意性を適用します。


5
一意の値を保証するものではありません。しかし、どちらも何もしません。データベースにアクセスできる人は誰でも、重複する値を主キーに挿入しようとすることができます。IDが行うことは、一意の値を生成しやすくすることです(特に、Kenneth Fisherが言うように、適切な自然キーがない場合)。主キーを使用して整数フィールドを宣言することもできますが、これはまったく同じですが、自動生成はありません。したがって、IDENTITYは生成用であり、キーは一意性を適用することです。
Chris Aldrich

+1質問の前提における基本的な欠陥を指摘するため- IdentityおよびPrimary Key同等ではなく、2つの異なる目的を果たします。
JNK 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.