web-dev-qa-db-ja.com

主キーと固有キーの違い

私はMySQLデータベースを使用しています。主キーと固有キーの間に混乱があります。

主キーと一意のキーをどこに作成すればよいかを教えてください。私たちはどの状況で私たちがユニークなキーまたは主キーを作成するかを意味します。

221
Anuj

主キー:

  • テーブルには主キーは1つしか存在できません
  • DBMSによっては、それをNULLにすることはできません。 MySQLがNOT NULLを追加
  • 主キーは、レコードの一意のキー識別子です。

ユニークキー:

  • 1つのテーブルに複数の一意のキーを含めることができます
  • ユニークキーはNULL値を持つことができます
  • それは候補キーになることができます
  • 一意のキーはNULLです。複数の行がNULLの値を持つことができるため、「一意」と見なされない
195
Mr. KB

一意キー(イギリス) :行内の一意性を識別できる列または列のグループです。

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

したがって、主キーは一意キーの別の名前ですが、SQL Serverの既定の実装は主キーと一意キーでは異なります。

デフォルトでは:

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

それは本当に英国またはPKを作成するかどうかを決定するときにあなたの目的が何であるかによって異なります。それは、「3人のチームがある場合、それらのすべてがピアであるが、ピアのペアになるそれらのうちの1つがあるでしょう:PKとイギリスは同様の関係を持っています」のような類似に従います。私はこの記事を読むことをお勧めします:著者によって与えられた例は適切ではないかもしれませんが、全体的な考えを得るようにしてください。

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

70
dhi

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

RDBMSの見通しによると、Key(別名Candidate Key)はエンティティを一意に識別する値または値のセットです。

DBテーブルの場合、非常に多くのキーが存在し、主キーに適格である可能性があります。そのため、すべてのキー、主キー、一意のキーなどをまとめて候補キーと呼びます。ただし、レコードを検索するために候補キーからキーを選択したDBAは、プライマリキーと呼ばれます。

主キーと一意キーの違い

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

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

3. NULL可能性: 主キーにはNULL値は含まれませんが、一意キーには許可されます。

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

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

詳細情報と例

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

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

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

つまり、行を一意に識別できるテーブル上の列の組み合わせが複数ある場合があります。主キーとして選択できるのはそのうちの1つだけです。他のものは、一意ではありますが候補キーです。

26
Oded

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

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

それは行を識別するのでそれは決して変わってはいけません。主キーを変更すると、深刻な痛みと、おそらく永遠の損害を引き起こすことにつながります。

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

一方、ユニークキーはあなたが望むだけ変更するかもしれません。

16
Jens Schauder

主キーと一意キーの違い

+-----------------------------------------+-----------------------------------------------+
|                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

14
Omer K

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

各テーブルは、 多くても ONE主キーを持つ必要がありますが、複数の固有キーを持つことができます。主キーは、テーブル行を一意に識別するために使用されます。 NULLは値ではないため、主キーをNULLにすることはできません。

7
Buhake Sindi
  • テーブル名は従業員だと思います。
  • 主キー
  • 主キーはNULL値を受け入れることができません。主キーは列の一意性を強制します。 1つのテーブルに持つことができる主キーは1つだけです。
  • ユニークキー
  • 一意キーはnull値を受け入れることができます。一意キーは列の一意性も強制します。一意キーにnull値が含まれている場合、それが一意になるのはなぜでしょうか。はい、null値を受け入れることはできますが、列の一意性を強制します。画像を見てみましょう。Emp_IDが主で、市民IDは一意です。ご理解ください。テーブル内で複数のユニークキーを使用できます。 enter image description here
6

私はこの質問が数年前であることを知っていますが、この説明への答えを提供したいと思います方法ではなくなぜ

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

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

行くぞ!

3
Manuri

あなたのデータベース設計が外部キーを必要としないようなものであるなら、あなたはユニークキー( で行くことができますがユニークキーは単一のnull値を許すことを覚えておいてください )。

データベースに外部キーが必要な場合は、主キーを使用する必要があります。

ユニークキーと主キーの違いを見るには ここ

1
user2903536

主キーと一意キーの違い

Primary keyUnique Key の両方を使用して、テーブル内の行を一意に定義します。 Primary Keyは列の clustered index を作成しますが、Unique creates an unclustered index of the columnは作成します。

A Primary KeyNULL valueを許可しませんが、a Unique Keyone NULL valueを許可します。

0
Gufran Hasan

主キー

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

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

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

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

ユニークキー

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

主キーを使用してそれを実行していませんか。うん、そうだけど、テーブルにはあなたがユニークにしたいカラムのセットがいくつかあるかもしれない。

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

  1. テーブルには複数の一意のキーを定義できます。
  2. 一意キーは、デフォルトでは非一意一意インデックスになります。
  3. 1つ以上の列が一意のキーを構成します。
  4. 列はNULLでもかまいませんが、列ごとに1つのNULLを指定できます。
  5. 一意の制約は、外部キー制約によって参照できます。

出典: ここ

0
Manish Vadher

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

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

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

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

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

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

0
Nischal Tyagi

単に主キーは一意であり、nullにすることはできません。

0

一意のキー:-一意の値を指定する必要がある場合に使用する必要があります。一意のキーの場合、null値も許可されます。一意のキーとは、ペット名など、その列で一意で非類似のキーです。 .itはnullのようなものではなく、データベースのコンテキストで尋ねている場合、すべてのnullはデータベース内の別のnullとは異なることに注意する必要があります。EXCEPT-SQL Server where null = null true


主キー:-row.primaryを一意に識別する必要がある場合に使用する必要があります。primaryは、データベース制約内のすべての行に対して一意であるキーです。nullを許可しないということです。自動インクリメントの列があり、それがテーブルの主キーです。さらに、別のテーブルの外部キーとして使用できます。例は、注文テーブルのorderIdbillId請求書表.

それを使用する状況に戻りました:-

1)テーブル内のヌルにできない主キーで、外部キーとして使用している関係を作成するための別のテーブル

2)レストランのスナックのように特定の列にnullを使用するかどうかは、テーブルまたはデータベース全体に影響しないテーブルの一意のキーレストランでのおやつ

0
ayushs27