PRIMARY KEY(主キー)とは作成したテーブルの中の1つまたは複数のカラムの組み合わせに対して設定するもので、テーブルに格納されているデータを識別するための目印のようなものです。また、FOREIGN KEY(外部キー)とは設定することで、対象のカラムに格納できる値を他のテーブルに格納されている値だけに限定することができるようになるものです。今回はこの2つのKEYについて紹介します。
PRIMARY KEY / FOREIGN KEYとは
下記テーブルを参考にPRIMARY KEYとFOREIGN KEYについて紹介します。
userテーブル
| ID | 名前 | クラス | メールアドレス |
| 1 | 山田 | A | yamada@example.com |
| 2 | 田中 | B | tanaka@example.com |
| 3 | 佐藤 | C | sato@example.com |
Classテーブル
| ID | クラス |
| 1 | A |
| 2 | B |
| 3 | C |
PRIMARY KEY制約(主キー)
PRIMARY KEY(主キー)とは、格納されたすべてのデータの中から 一意のデータを識別するための項目です。そのため、重複したデータやNULLを入れることはできません。
上記userテーブルを例に出すと、下記のIDカラムがPRIMARY KEYにあたります。
| ID |
| 1 |
| 2 |
| 3 |
PRIMARY KEYとして一意のIDを持たせることで、仮に同じ名前の登録が複数あった場合でも、それぞれのデータを識別させることが可能です。
下記のようにテーブルを作成することでPRIMARY KEYの設定をすることができます。
CREATE TABLE user
(
ID int PRIMARY KEY
)FOREIGN KEY制約(外部キー)
FOREIGN KEY制約(外部キー制約)とは親テーブルと子テーブルの2つのテーブル間でデータの整合性を保つために設定される制約です。
具体的には子テーブルにデータを追加するとき、 FOREIGN KEY 制約が設定されたカラムには、親テーブルのカラムに格納されている値しか格納することができなくなります。親テーブルに存在しない値を含むデータを追加しようとするとエラーとなります。
userテーブルとClassテーブルを例にすると、Classテーブルに保存されているクラスしかuserテーブルのクラスカラムに保存ができないような制約を設けることがFOREIGN KEY制約になります。
また、userテーブルで使われているにもかかわらず、そのクラスをClassテーブルから削除しようとするとエラーが発生し、データの不整合を防ぐことができます。
下記の様に記載することでFOREIGN KEY制約を設けることができます。
親テーブル
CREATE TABLE Class
(
ID int PRIMARY KEY
)
子テーブル
CREATE TABLE user
(
FOREIGN KEY fk_class(class_id) REFERENCES Class(id)
)エンジニアからのアドバイス
データベースを設計する上でテーブル同士の関係はとても重要になってきます。今後のプロダクトの方向性や拡大イメージを想定して外部キーの設定やテーブル作成を行いましょう。
