主キーと候補キーには、以下に示す比較表を使用して説明するいくつかの違いがあります。
比較表
比較基準 | 主キー | 候補キー |
---|---|---|
基本 | どのリレーションにも主キーは1つしか存在できません。 | リレーションには複数の候補キーがあります。 |
ヌル | 主キーの属性にNULL値を含めることはできません。 | 候補キーの属性はNULL値を持つことができます。 |
指定する | 関係に主キーを指定することはオプションです。 | 候補キーが指定されていない関係はあり得ません。 |
特徴 | 主キーは、関係の最も重要な属性を表します。 | 候補キーは、主キーに適格な候補を提示します。 |
逆に | 主キーは候補キーです。 | ただし、各候補キーが主キーになることは必須ではありません。 |
主キーの定義
主キーは、リレーション内の各タプルを一意に識別する属性または属性のセットです。 各リレーションには主キーは1つだけ存在できます。 主キーにNULL値が含まれないように注意してください。また、リレーション内のタプルごとに固有の値を持つ必要があります。 主キーの属性の値は静的である必要があります 。つまり、属性の値は決してまたはほとんど変更されません。
候補キーの 1つが主キーになる資格を得ます。 候補キーが主になるために適格でなければならないという規則は、キー値が決してNULLであってはならず、そしてそれがすべてのタプルに対してユニークでなければならないということです。
関係に他の関係の主キーである属性が含まれている場合、その属性は外部キーと呼ばれます 。
主キーは各タプルを一意に識別するため、関係の他の属性を導入する前に、関係の主キーを把握することをお勧めします。 主キーとして単一の属性または少数の属性を選択すると、関係の処理が簡単になります。
それでは、主キーの例を見てみましょう。
学生{ID、名、姓、年齢、住所}
ここで最初に候補キーを見つけます。 2つの候補キー{ID}と{First_name、Last_name}は、Studentリレーション内の各生徒を一意に識別するためのものです。 さて、ここで私は主キーとしてIDを選びます。なぜなら2人の生徒が同じ名前と姓を持つことがあるので、自分のIDで生徒を追跡するのは簡単だからです。
候補キーの定義
候補キーは、リレーション内のタプルを一意に定義する属性または属性のセットです。 リレーションには複数の候補キーがあります。 これらの候補キーは、主キーになる資格がある候補です。
各候補キーは主キーになる資格がありますが、主キーとして選択できるのは1つだけです。 候補キーが主キーになるために必要な規則は、キーの属性値がそのキーのどのドメインでもNULLになることがないことです。 一意で静的である必要があります 。
すべての候補キーが主キーの資格を得ている場合は、経験豊富なDBAが主キーを判断するための決定を下す必要があります。 候補キーがないと関係はあり得ません。
例を挙げて候補キーを理解しましょう。 生徒の関係にさらにいくつかの属性を追加する場合は、上記で説明しました。
学生{ID、名、姓、年齢、住所、DOB、部署名}
ここで私は{ID} 、 {First_name、Last_name、DOB}の 2つの候補キーを見つけ出すことができます。 したがって、候補キーはリレーション内のタプルを一意に識別するキーであることがわかります。
主キーと候補キーの主な違い
- 主キーと候補キーを区別する基本的な点は、スキーマ内のリレーションに対して主キーは1つしか存在できないということです。 ただし、単一の関係に対して複数の候補キーが存在する可能性があります。
- 主キーの主な機能は、関連するレコードを一意に識別することであるため、主キーの下の属性にNULL値を含めることはできません。 主キーであっても他の関係で外部キーとして使用される可能性があるため、参照関係が参照関係でタプルを見つけることができるように、NULLであってはなりません。 属性制約がNULL以外で指定されていない限り、候補キーはNULLでもかまいません。
- 主キーを指定するのはオプションですが、候補キーがないと関係はあり得ません。
- 主キーはリレーションの一意で最も重要な属性を記述しますが、候補キーは候補の中から1つを主キーとして選択できる候補を提供します。
- すべての主キーは候補キーですが、その逆も当てはまりません。
結論:
関係が主キーを指定することはオプションです。 一方、関係を宣言している場合、良い関係を構築するためには候補キーがその関係に存在していなければなりません。