推奨されます, 2024

エディターズチョイス

主キーと一意キーの違い

データベースとスキーマで使用されているさまざまな種類のキー、つまり主キーと外部キーの違いについては、以前の記事ですでに説明しました。 この記事では、主キーと一意キーを区別しています。 主キーと一意キーの両方を使用してタプルを一意に識別し、列または列の組み合わせに一意性を強制します。

主キーと一意キーの本質的な違いは、主キーはNULL値を受け入れないのに対し、NULL値は一意キー制約内で許可されることです。

比較表

比較基準主キーユニークキー
基本テーブルの各行の一意の識別子として使用されます。また、主キーとして定義されていない行を一意に決定します。
NULL値の受け入れ主キーはNULL値を受け入れません。UniqueはNULL値を受け入れます。
表に定義できるキーの数主キーは1つだけ複数の
索引クラスタ化インデックスを作成します非クラスタ化インデックスを作成します

主キーの定義

列がその表の各タプル(行)を一意に識別する場合、その列はその表の主キーとしてコールできます。 それはテーブルに整合性制約を強制します。 1つのテーブルに許可される主キーは1つだけです。 主キーは、重複値およびNULL値を受け入れません。 主キーは、変更がめったに起こらないように注意して選択されます。つまり、テーブル内の主キーが変更されることはほとんどありません。

テーブルを使って主キーの概念を理解しましょう。 ここでは、Roll_number、Name、Batch、Phone_number、Citizen_IDなどの属性を持つStudentテーブルという名前のテーブルを作成しています。

与えられた例では、すべての学生がユニークなRoll_numberで大学に入学したので、属性roll numberは決して同一のNULL値を持つことはできません。 2人の生徒が同じRoll_numberを持つことはできず、テーブル内の各行は生徒のロール番号で一意に識別されます。 そのため、この場合はRoll_number属性を主キーとして設定できます。

主キーは外部キーによって参照できます。 テーブルに一意のクラスタ化インデックスを作成します。 クラスタ化インデックスでは、データ行はキー値に基づいて並べ替えられ、テーブルまたはビューに格納されます。 テーブル内にクラスタ化インデックスは1つしか存在できません。これは、テーブル内のデータ行を1つの順序でのみ並べ替えることができるためです。

ユニークキーの定義

主キーと同様に、 一意キー制約でも個々のタプルを関係内で一意に識別します。 しかし、それらの間には一定の違いがあります。 テーブルは複数のユニークキーを持つことができます。 一意キー制約は、列に対して1つのNULL値しか受け入れません。

Roll_number、Name、Batch、Phone_number、およびCitizen_IDの各属性を持つStudentテーブルがある、同様の例でこれを理解しましょう。 ロール番号属性は主キーで割り当てられます。

ここで、Citizen_IDは、Citizen_ID列の各エントリが一意でなければならず、重複しないように一意の制約を割り当てられます。国の各市民には一意の識別番号が必要です。 しかし、学生が他の国から移住する場合、その場合、彼または彼女はCitizen_IDを持たず、一意の制約で1つのNULLが許可されているため、エントリはNULL値を持つ可能性があります。

一意性制約も外部キーによって参照されます。 誰かが主キーではない列や列のグループに制約を強制したい場合に使用できます。 主キーとは異なり、 非クラスタ化インデックスを生成します 。 非クラスタ化インデックスは、データ行とは異なる構造を持っています。 その中の各キー値エントリは、キー値を含むデータ行を指しているため、ポインタを使用します。

主キーと一意キーの主な違い

  1. 主キーとして宣言された属性は、NULL値を受け入れません。 一方、属性がUniqueとして宣言されている場合、1つのNULL値を受け入れることができます。
  2. テーブルには主キーしか持てませんが、テーブルには一意の制約が複数ある場合があります。
  3. 主キーが定義されると自動的に作成されるクラスタードインデックス。 対照的に、一意キーは非クラスタ化インデックスを生成します。

結論

主キーと一意キーはどちらも、列または列のグループに一意の値を持つ表の行の一意の識別子として機能します。 これらのキー制約は、すべてのテーブルが最大で1つの主キーを持つことができるのに対して、テーブルは主キーではない複数の一意のキーを持つことができるという点で大きく区別されます。

Top