主キーと外部キーの違い
主キーと外部キーの主な違い
- 主キー制約はリレーショナル データベース管理システムのテーブル内のすべての行を一意に識別する列であり、外部キーは XNUMX つのテーブル間の関係を作成する列です。
- 主キーは null 値を決して受け入れませんが、外部キーは複数の null 値を受け入れることができます。
- テーブルには主キーを XNUMX つだけ持つことができますが、テーブルには複数の外部キーを持つことができます。
- 主キーの値は親テーブルから削除できませんが、外部キーの値は子テーブルから削除できます。
- XNUMX つの行に主キーの値が同一であることはできません。 一方、外部キーには重複した値を含めることができます。
- 外部キー テーブルに値を挿入する際に、テーブル列に値を挿入することに制限はありません。値が主キーの列に存在することを確認してください。

ここでは、主キーと外部キーの違いを分析し、それぞれの長所と短所を総合的に評価します。
主キーとは
主キー制約は、リレーショナル データベース管理システムのテーブル内のすべての行を一意に識別する列または列のグループです。重複することはできません。つまり、テーブル内に同じ値が複数回出現してはなりません。
テーブルには複数の主キーを持つことはできません。の 主キー 列またはテーブルレベルで定義できます。複合主キーを作成する場合は、テーブル レベルで定義する必要があります。
主キーの例
構文:
主キーの構文は次のとおりです。
CREATE TABLE <Table-Name> ( Column1 datatype, Column2 datatype, PRIMARY KEY (Column-Name) . );
ここでは、
- Table_Name は、作成する必要があるテーブルの名前です。
- Column_Name は、主キーを持つ列の名前です。
例:
| スタッドID | ロール番号 | 名 | 姓 | メールアドレス |
|---|---|---|---|---|
| 1 | 11 | トム | 価格 | abc@gmail.com |
| 2 | 12 | Nick | ライト | メールアドレス |
| 3 | 13 | ダナ | ネイサン | mno@yahoo.com |
上記の例では、StudID、Roll No.、First Name、Last Name、Email などの列を持つ学生テーブルを作成しました。StudID はテーブル内の他の行を一意に識別できるため、主キーとして選択されています。
主キーを使用する理由
私は長年データベース システムを扱ってきた中で、主キーを使用する場合の次のような短所と利点に気づいてきました。
- 主キーの主な目的は、データベース テーブル内のすべてのレコードを識別することです。
- NULL 値の入力を許可しない場合は、主キーを使用できます。
- レコードを削除または更新すると、データの整合性を確保するために指定したアクションが実行されます。
- 親テーブルの削除または更新操作を拒否するには、制限操作を実行します。
- DBMS テーブルを物理的に編成するたびに、データはクラスター化インデックスのシーケンスに編成されます。
外部キーとは
外部キーは、XNUMX つのテーブル間の関係を作成する列です。 外部キーの目的は、データの整合性を維持し、エンティティの XNUMX つの異なるインスタンス間のナビゲーションを可能にすることです。 別のテーブルの主キーを参照するため、XNUMX つのテーブル間の相互参照として機能します。 データベース内のすべての関係は、外部キーによってサポートされている必要があります。
外部キーの例
構文:
以下は外部キーの構文です。
CREATE TABLE <Table Name>( column1 datatype, column2 datatype, constraint (name of constraint) FOREIGN KEY [column1, column2...] REFERENCES [primary key table name] (List of primary key table column) ...);
ここでは、
- パラメータ「テーブル名」は、作成するテーブルの名前を示します。
- パラメータ column1、column2… は、テーブルに追加する必要がある列を示します。
- 制約は、作成している制約の名前を示します。
- 参照は主キーを持つテーブルを示します。
例:
| DEPTCode | 部署名 |
|---|---|
| 001 | 科学 |
| 002 | 英語 |
| 005 | パソコン |
| 教師ID | 名前 | 名前 |
|---|---|---|
| B002 | デイビッド | ワーナー |
| B017 | サラ | 美咲さん(専業主婦) |
| B009 | マイク | ブラントン |
上の例には、学校の教師と部門という 2 つのテーブルがあります。ただし、どの検索がどの部門で機能するかを確認する方法はありません。
このテーブルでは、Deptcode の外部キーを教師名に追加することで、2 つのテーブル間にリレーションシップを作成できます。
| 教師ID | DEPTCode | 名前 | 名前 |
|---|---|---|---|
| B002 | 002 | デイビッド | ワーナー |
| B017 | 002 | サラ | 美咲さん(専業主婦) |
| B009 | 001 | マイク | ブラントン |
この概念は、参照整合性とも呼ばれます。
外部キーを使用する理由
私がこれまで見てきたことから、外部キーを実装する重要な理由は次のとおりです。
- 外部キーは、親テーブルの主キーを使用してエンティティを移行するのに役立ちます。
- A 外部キー 2 つ以上のテーブルをリンクできます。
- これにより、データベースのデータの一貫性が保たれます。
- 外部キーを使用すると、列または列の組み合わせを親テーブルの主キーと照合することができます。
- SQL 外部キー制約は、データの親の参照整合性が子テーブルの値と一致することを確認するために使用されます。
主キーと外部キーの違い
私が個人的に経験した、主キーと外部キーの重要な違いを共有しましょう。

| 比較基準 | 主キー | 外部キー |
|---|---|---|
| 主キー制約は、テーブル内のすべての行を一意に識別する列または列のグループです。 リレーショナルデータベース管理システム. | 外部キーは、2 つのテーブル間の関係を作成する列です。 | |
| Basic | これは、テーブル内のレコードを一意に識別するのに役立ちます。 | これは、別のテーブルの主キーとなるテーブル内のフィールドです。 |
| NULL | 主キーは決して null 値を受け入れません。 | 外部キーは複数の null 値を受け入れることができます。 |
| インデキシング | 主キーはクラスター化インデックスであり、DBMS テーブル内のデータはクラスター化インデックスの順序で物理的に編成されます。 | 外部キーでは、クラスター化または非クラスター化のインデックスを自動的に作成することはできません。 |
| 数量カウント | テーブルには 1 つの主キーを含めることができます。 | テーブルには複数の外部キーを含めることができます。 |
| 削除 | 主キーの値は親テーブルから削除できません。 | 外部キーの値は子テーブルから削除できます。 |
| 一時テーブル | 一時テーブルに主キーを暗黙的に定義できます。 | ローカル一時テーブルまたはグローバル一時テーブルに外部キーを定義することはできません。 |
| 関係 | 主キーはクラスター化インデックスです。 | デフォルトでは、クラスター化インデックスではありません。 |
| 複製 | 2 つの行に主キーの値が同じであることはできません。 | 外部キーには重複した値を含めることができます。 |
| 挿入 | テーブル列への値の挿入に制限はありません。 | 外部キー テーブルに値を挿入するときは、その値が主キーの列に存在することを確認してください。 |
主キーと外部キーのどちらかを選択する方法
これまで見てきたことから、主キーはテーブル エントリを一意に識別し、外部キーはこれらのエントリをテーブル間でリンクします。これらはどちらもデータの整合性を維持し、効率的なデータ取得を促進するために重要です。
