DBMSの主キーと外部キーの違い
コンテンツ
キーは、スキーマ内のテーブル間の関係を識別および確立するために使用されるDBMSの重要な部分です。さて、今日はDBMSの2つの非常に重要なキー、つまり主キーと外部キーについて説明し、主キーと外部キーの違いについても説明します。途中で、主キーである主キーと外部キーの基本的な違いはデータベース設計者が選択した候補キーの1つですが、外部キーは別のリレーションの主キーを参照するキーです。
これら2つの間には他にも多くの違いがあります。以下に示す比較チャートを使用して、それらの違いを識別してみましょう。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | 主キー | 外部キー |
---|---|---|
ベーシック | 主キーは、リレーションのタプルを一意に定義する選択された候補キーです。 | テーブル内の外部キーは、他のテーブルの主キーを参照します。 |
ヌル | 主キーの値をNULLにすることはできません。 | 外部キーはNULL値を受け入れます。 |
複製する | リレーション内の2つのタプルは、主キー属性の重複値を持ちません。 | タプルは、外部キー属性の重複値を保持できます。 |
範囲 | リレーションの主キーは1つだけです。 | リレーションには複数の外部キーが存在する場合があります。 |
一時テーブル | 主キー制約は、一時テーブルで定義できます。 | 外部キー制約は、一時テーブルに定義できません。 |
クラスター化インデックス | デフォルトでは、主キーはクラスター化インデックス化されます。 | 外部キーは自動的にクラスター化インデックス化されません。手動で行う必要があります。 |
挿入 | 参照する外部キーの列にその値がない場合でも、主キー属性に値を挿入できます。 | その値が参照される主キー列に存在しない場合、外部キーに値を挿入することはできません。 |
削除 | 主キー値を削除する前に、参照元テーブルの参照元外部キー列に値がまだ存在していないことを確認してください。 | 参照される関係の参照される主キー列にその値が存在するかどうかを気にすることなく、外部キー列から値を削除できます。 |
主キーの定義
主キー ユニークに リレーションのタプルを定義します。リレーション内の単一の属性にすることも、リレーション内の属性のセットにすることもできます。主キー属性の値は 決してまたはほとんど変更されません。プリンシパルであるため、データベース内のレコードを識別することを意味します。主キーの属性値を変更すると混乱が生じます。
データベース設計者は、次のいずれかを選択します 候補キー いくつかのポイントを考慮に入れて、主キーとして。最初の考慮事項は、主キー属性値に含めることができないことです ヌル 値。なぜなら、主キー属性値にNULLが含まれている場合、テーブル内のそのレコードを識別できないことを意味するためです。また、エンティティの整合性制約に違反します。 2番目の考慮事項は、 2つのタプルはありません テーブルに含めることができます 同じ タプル間の一意性に違反するため、主キー属性の値。
あることができます 1つの主キー のために 関係。主キーはデフォルトです クラスター索引付き、つまり、主キーの属性値に基づいて、テーブル内のすべてのタプルがソートされることを意味します。主キー制約は、 一時テーブル。クエリの実行中に作成された中間テーブルは、一時テーブルと呼ばれます。
ながら 削除する リレーションからのタプル、削除されたタプルの主キー値が参照リレーションの外部キー列にまだ存在しないように注意する必要があります。一方、 挿入 主キーに制約はありません。
テーブルの主キーは、他のテーブルで使用されると、そのテーブルの外部キーになります。外部キーの制約については、以下で説明します。
外部キーの定義
関係が R1、その属性の中で、 一次 キー 他の関係の R2、その属性が呼び出されます 外部キー 関係のために R1。関係 R1 外部キーを含むが呼び出されます 参照関係 リレーションR2およびリレーションの主キーを参照するため R2 と呼ばれます 参照される関係.
主キーとは異なり、外部キーは受け入れることができます ヌル なぜなら、このための主キーがあるため、リレーションでレコードを明確に識別するタスクを持たないからです。同様に、外部キーも受け入れます 重複する値.
関係は持つことができます 複数 外部キー。異なるリレーションのプライマリキーである異なる属性を持つことができます。外部キー制約は じゃない で定義される 一時テーブル, また 外部キーは クラスター索引付き 属性。
ながら 挿入 参照関係の外部キー列に値を挿入する場合は、挿入値が参照関係の主キー列に存在する必要があることを確認してください。一方、制約はありませんが 削除する 外部キー列の値。
- プライマリは、関係のレコードを明確に識別する属性/候補キーのセットです。ただし、テーブル内の外部キーは、別のテーブルの主キーを参照します。
- 主キー属性はNULL値を含むことができませんが、外部キー属性はNULL値を受け入れることができます。
- 主キーには一意の属性値が必要ですが、外部キーには重複した属性値が含まれる場合があります。
- リレーションには複数の外部キーが存在する場合がありますが、リレーションには主キーが1つしかありません。
- 主キー制約は、一時テーブルに適用できます。ただし、外部キー制約は一時テーブルに適用できません。
- 主キーはデフォルトでクラスター化インデックス化されますが、外部キーは自動的にクラスター化インデックス化されませんが、手動で実行できます。
- 外部キー列に値を挿入するときに、参照されている主キー列に挿入属性値が存在することを確認してください。ただし、主キー列への挿入に制限はありません。
- 主キー列から値を削除する際、削除された属性値が参照する外部キー列に存在しないことを確認してください。ただし、外部キー列から値を削除する際の制約はありません。
結論:
スキーマには、主キーと外部キーの両方が不可欠です。主キーはリレーションの各タプルを一意に定義しますが、外部キーは2つのリレーション間のリンクを作成するために使用されます。