主キーと一意キーの違い


252

mysqlデータベースを使用しています。主キーと一意キーの間で混乱があります。

主キーと一意キーをどこに作成すればよいか教えてください。つまり、どのような状況で一意のキーまたは主キーを作成するかということです。


9
wrt null機能は、それらを区別するための良い方法です PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU 2014年

回答:


233

主キー:

  • テーブルに存在できる主キーは1つだけです
  • 一部のDBMSではできないNULL-MySQLの追加NOT NULL
  • 主キーは、レコードの一意のキー識別子です

一意のキー:

  • 1つのテーブルで複数の一意のキーにすることができます
  • 一意のキーはNULL値を持つことができます
  • それは候補キーになることができます
  • 一意のキーは次のとおりNULLです。複数の行にNULL値を含めることができるため、「一意」と見なされない場合があります

11
また、主キー(CustomerID、ProductID)などの複数の列に作成できる主キーを追加することもできます。これは複合主キーと呼ばれます。これは、最初のポイントを明確にするためです。SQLへの新規参入者がそのまま(1つのキー=> 1列を読み取る)とする場合があるためです。)
ケン

1
「候補キーになることができる」のあなたの意味は何ですか?

1
「単一のnullのみが許可されます」-これは、少なくともMySQLには当てはまりません。
ジャニスElmeris

69
一意のキーはnullにすることができ、一意ではない可能性があります手段 ??
Pratik

20
@PratikCJoshi彼はおそらく、それ以外の場合は一意のキーにnullを含む複数の行になる可能性があることを意味します。
John

77

一意のキー(英国):行の一意性を識別できる列または列のグループです。

主キー(PK):行の一意性を識別することができる列または列のグループであります。

したがって、主キーは一意キーの別の名前にすぎませんが、SQL Serverのデフォルトの実装は、主キーと一意キーで異なります。

デフォルトでは:

  1. PKはクラスター化インデックスを作成し、UKは非クラスター化インデックスを作成します。
  2. PKはnullではありませんが、UKはnullを許可します(注:デフォルト)
  3. テーブルに存在できるPKは1つだけですが、UKは複数存在できます
  4. 必要に応じて、デフォルトの実装をオーバーライドできます。

UKとPKのどちらを作成するかを決定するときの目的は、本当にそれによって異なります。それは、「3人のチームがあり、それらすべてが仲間であるが、ピアのペアとなる1人がいる場合:PKとUKは同様の関係にある」などのアナロジーに従います。私はこの記事を読むことをお勧めします:著者が示した例は適切ではないように見えるかもしれませんが、全体的なアイデアを得ようとします。

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


つまり、PKには複数の列を含めることができます。それでは、テーブルにPKを1つだけ置くにはどうすればよいでしょうか。

@android複数の列を持つPKは、一意性に関して単一の列として機能します。少なくともPostgreSQLでは、これは新しい列(デフォルト名は[table_name]_pkey)がテーブルに追加されることを意味します(これは代理キーと呼ばれると聞いたことがあります)。出典:postgresqltutorial.com/postgresql-primary-keyこれは初めてなので、見逃したニュアンスを指摘するためのより知識のあるポスターをいただければ幸いです。
Poik 2018年

わかりました、それは列ではありません。読み違えました。これは制約であり、列ではありません。クラスタ化インデックスはまだありますが、1列ではなく2列を超えています。そして、その中の各列はそれ自体が主キーではなく、セット全体が主キーです。したがって、これらのインスタンスにはPKが1つしかありません。
Poik 2018年

46

組織または企業の場合、非常に多くの物理エンティティ(人、リソース、マシンなど)と仮想エンティティ(タスク、トランザクション、アクティビティ)があります。通常、ビジネスはこれらのビジネスエンティティの情報を記録および処理する必要があります。これらのビジネスエンティティは、ビジネスドメイン全体でキーによって識別されます。

RDBMSの見込みに従って、キー(別名候補キー)は、エンティティを一意に識別する値または値のセットです。

DB-Tableの場合、非常に多くのキーが存在し、主キーの対象になる可能性があります。すべてのキー、主キー、一意のキーなどをまとめて候補キーと呼びます。ただし、DBAはレコードを検索するための候補キーからキーを選択しました。これは主キーと呼ばれます。

主キーと一意キーの違い

1.動作: 主キーはテーブル内の行(レコード)を識別するために使用されますが、一意キーは列内の値の重複を防ぐために使用されます(nullエントリを除く)。

2.インデックス作成: デフォルトでは、SQLエンジンは、プライマリキーにクラスター化インデックスが存在しない場合は作成し、非クラスター化インデックスを一意キーに作成します。

3. null可能性:主キーにはnull値は含まれませんが、一意キーには含めることができます。

4.存在:テーブルは最大で1つの主キーを持つことができますが、複数の一意キーを持つことができます。

5.変更可能性:プライマリ値を変更または削除することはできませんが、Unique-key値は変更できます。

詳細と例について:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


7
5番目のポイントで、プライマリ値を変更または削除することはできないと言いました。更新ステートメントを使用して、テーブルのプライマリ値を確実に変更できます。
Kapil

3
@Kapilを使用すると、主キーを使用するという目的全体が達成されます。
Gokigooooks

2
クラスタ化インデックス:行は、インデックスと同じ順序で物理的にディスクに格納されます
DuyĐặngJan

26

主キーは一意である必要があります。

一意のキーが主キーである必要はありません。候補キーを参照してください。

つまり、行を一意に識別できるテーブルの列の組み合わせが複数存在する可能性があります。これらの1つだけを主キーとして選択できます。他のものはユニークですが候補キーです。


17

主キーと一意キーの違い

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

詳細については、http
//www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.htmlをご覧ください。


16

主キーには、データベースの行を識別するという意味があります。したがって、特定のテーブルの主キーは1つしか存在できませんが、一意のキーは多数存在できます。

また、同じ理由で、主キーをNULLにすることはできません(少なくともOracleでは、他のデータベースについては不明です)。

行を識別するため、決して変更してはなりません。主キーの変更は、深刻な痛みを引き起こし、おそらく永遠の破滅を引き起こすでしょう。

そのため、ほとんどの場合、テーブル内の単一の行を識別する以外に使用されない主キーの人工的なIDが必要になります。

一方、一意のキーは好きなだけ変更できます。


22
永遠の破滅のリスクに言及するための+1。神学をリレーショナルデータベース理論に導入する時が来ました。
Neville Kuyt

SQL ServerでもPKをNULLにすることはできません
mrd3650

7

主キーは一意のキーです。

各テーブルには最大で 1つの主キーが必要ですが複数の一意キーを持つことができます。主キーは、テーブルの行を一意に識別するために使用されます。主キーにすることはできませんNULLので、NULL値ではありません。


6
  • テーブル名が雇われていると思います。
  • 主キー
  • 主キーはnull値を受け入れることができません。主キーは列の一意性を強制します。テーブルに含めることができる主キーは1つだけです。
  • 一意のキー
  • 一意のキーはnull値を受け入れることができます。一意のキーは列の一意性も強制します。一意のキーにnull値が含まれている場合、なぜ一意であるのかを考えることができますか?はい、null値を受け入れることができますが、列の一意性を強制します。写真を見てください。ここでEmp_IDはプライマリで、市民IDは一意です。ご理解いただければ幸いです。テーブルで複数の一意のキーを使用できます。 ここに画像の説明を入力してください

1
一意のキーに複数のnull値を挿入することはできず、重複も許可されません。
Masum

@ mahedi-hasan一意のキー列にはNULL値を1つだけ含めるべきではありませんか?シチズンID NULLの最後の2行はどうしてですか?ここで何か不足していますか?
超新星

上記の私のコメントへの回答を得ました。MySQLは一意の複数のNULLを許可するように見えるため、@ Mahedi_HasanがMySQLを使用したようにも見えます。 stackoverflow.com/questions/3712222/...
超新星

6

私はこの質問が数年前のものであることを知っていますが、どのようにではなくその理由を説明する答えを提供したいと思います

主キーの目的:データベース内の行を一意に識別する=>行は、テーブルによってモデル化されたエンティティタイプの単一のインスタンスを表します。主キーは、エンティティの整合性、別名エンティティ整合性を実施します。主キーはクラスター化インデックスです。つまり、データが物理的にテーブルに格納される順序を定義します。

一意キーの目的:OK、主キーを使用して、行を一意に識別する方法があります。しかし、別の列または列のセットに一意の値を設定する必要があるというビジネス上のニーズがあります。まあ、技術的には、この列が一意であることを考えると、エンティティの整合性を適用する候補になる可能性があります。しかし、私たちが知っているすべての人にとって、この列には、一意であることについて疑問があるかもしれない外部組織からのデータを含めることができます。エンティティの整合性を提供することは信頼できません。私は、ビジネス要件を満たすための唯一の鍵にします。

よし!


1

データベース設計で外部キーが不要な場合は、一意のキーを使用できます(ただし、一意のキーは単一のnull値を許可することに注意してください)。

データベースが外部キーを要求する場合は、主キーを使用する必要があるため、選択肢がなくなります。

一意のキーと主キーの違いを確認するには、こちらにアクセスしてください


1

一意のキー:-一意の値を指定する必要がある場合に使用する必要があります。一意のキーの場合は、null値も許可されることを意味します。一意のキーは、たとえばペットの名前など、その列で一意で類似していないキーです.itはnullのようなものにすることはできません。データベースのコンテキストで質問する場合、すべてのnullはデータベース内の別のnullとは異なることに注意する必要があります。EXCEPT-SQLサーバー(null = nullがtrueの場合)


主キー:-行を一意に識別する必要がある場合に使用する必要があります.primaryは、データベース制約のすべての行に固有のキーであり、nullを許可しないため、データベースが自動インクリメントの列があり、それがテーブルの主キーです。それに加えてすることができ、別のtable.exampleの外部キーとして使用することができ、注文表に注文ID法案の表にbillId

今それを使用する状況に戻ってきます:-

1) テーブルでnullにできない列の主キーであり、リレーションシップを作成するために別のテーブルで外部キーとして使用している

2)テーブル内またはデータベース全体に影響しないテーブル内の一意のキー。レストランのスナックのように特定の列にnullを使用するかどうかにかかわらず、レストランではスナックを摂取しない可能性があります。


1

主キーと一意キーの違い

Primary keyUnique Keyは両方とも、テーブル内の行を一意に定義するために使用されます。 Primary Keyclustered index列のを作成しますが、Unique creates an unclustered index of the column

A Primary Keyは許可しませんがNULL valuea Unique Key許可しone NULL valueます。


0

単に主キーは一意であり、nullにすることはできません。uniqueはnullにすることができ、一意でない場合があります。


「一意はnullにすることができ、一意でない場合があります」。may not be uniqueここはどういう意味ですか?
Yusuf Hassan

0

主キー

主キーの主な目的は、テーブル内の各レコードを識別する手段を提供することです。

主キーは、行内のデータを使用して行を識別する手段を提供します。主キーは、姓名などの1つ以上の列に基づくことができます。ただし、多くの設計では、主キーはID列から自動生成された数値です。

主キーには次の特性があります。

  1. テーブルの主キーは1つだけです。
  2. 主キーは1つ以上の列で構成されます。
  3. 主キーは、テーブルのエンティティの整合性を強化します。
  4. 定義されたすべての列は、NOT NULLとして定義する必要があります。
  5. 主キーは行を一意に識別します。
  6. 主キーは、デフォルトでCLUSTEREDユニークインデックスになります。

一意のキー

一意キーは一意制約とも呼ばれます。一意制約を使用して、データベース内で行が一意であることを確認できます。

既に主キーでそれをしていませんか?はい、ありますが、テーブルには、一意にする列のセットがいくつかある場合があります。

SQL Serverでは、一意のキーには次の特性があります。

  1. テーブルには複数の一意のキーを定義できます。
  2. 一意のキーは、デフォルトでNONCLUSTEREDの一意のインデックスになります。
  3. 1つ以上の列が一意のキーを構成します。
  4. 列はNULLの場合がありますが、列ごとに1つのNULLが許可されます。
  5. ユニーク制約は、外部キー制約によって参照できます。

ソース:ここ


0

主キーの主な機能は次のとおりです。

データの各行に一意の値が含まれている必要があります。null値を含めることはできません。テーブル内の1つの主キーのみ。

ユニークキーの主な機能は次のとおりです。

データの各行に一意の値を含めることもできます。

null値を含めることもできます。

テーブル内の複数の一意のキー。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.