##はじめに
どうも、未経験からエンジニア転職を目指しているもきおです。
自作ポートフォリオ(自分はRalisで作ってます)を作成していてデータベース設計をしている時、プライマリーキーやら外部キーやらユニークキーやら色んなキー制約があり何使えばいいんや?と感じてました。
今回SQLを改めて学習したのでそれぞれの役割、制約について書き記したいと思います。
SQL削除命令文は以下記事にまとめました。良ければご覧ください。
主キー (PRIMARY KEY)制約
テーブルのレコードを一意に特定するためのKEY
特徴
・一意である
・基本一つのテーブルに一つだけ
・設定するだけでNULLと重複を禁止してくれる
CREATE TABLE users
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT(3)
);
###一意ってなんだ?
一意とは「重複させないよ」、もっとカッコつけて言うと「オンリーワンだよ」ってこと
例:
1,2,3,4,5はそれぞれ重複しないので一意
1,1,1,2,3は1が重複しているので全体としては一意ではない
以下より抜粋
https://wa3.i-3-i.info/word12715.html
###PRIMARY KEY 使用例
基本的にはidに設定すると思います。
idを主キー(PRIMARY KEY)にすることで名前が重複していてもid,1のもっさんとid,2のもっさんに区別することができます。
外部キー (FOREIGN KEY)制約
テーブル間の関係性を設定
関連するテーブル間の整合性を保証するためのKEY
CREATE TABLE orders
(
id INT(10),
user_id INT,
amount INT(20),
price INT(20),
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
外部キーを付与するとこのようにテーブル間の関連性を持たせることができます。
ここではUsersが親テーブル、Ordersが子テーブルとなります。
そしてこのキー設定の後のON DELETE CASCADEとは親テーブルのデータが削除された際にデータの整合性を保つ為、子テーブルも一緒に削除するためのオプションです。
このように外部キーを設定することでテーブル間で関連付けられた設定を行うことができます。
ユニークキー (UNIQUE KEY)制約
プライマリーキー以外のデータの重複を禁止
特徴
・重複を禁止
・複数設定可能
CREATE TABLE users
(
id INT(3) AUTO_INCREMENT,
name VARCHAR(255),
email VARCHAR(255),
PRIMARY KEY (id),
UNIQUE KEY (email)
);
###UNIQUE KEY 使用例
emailとかパスワードとかの重複を防ぎたいものに対し設定することが多いかと思います。
##あとがき
今まで見様見真似で使用してしまってましたが整理することができました。
アプリケーション作成時にはデータベース設計が必ずと言っていいほど絡んでくるので引き続きSQLの理解に努めていきたいと思います。
この記事が少しでも良いと感じていただけましたらLGTMポチッとしていただけますと幸いです。