前回はクエリでCRUD(Create,Read,Update,Delete)を行いました。今日はその続きです。
リレーショナルなデータとは
データ同士でつながっているものがありますね。例えば、レストランなら、会社の情報、メニューの情報、お客さんの情報は、それぞれ別のデータベースのテーブルに格納されますが、そのうちのカラムは他のテーブルに依存することになります。
下記に、その関係となる3つのタイプを紹介します。
- One – One(ユーザーと、クレジットカード情報など):一つのデータ同士
- One – Many(ユーザーと会計で使う食べた食事のデータ)
- Many – Many(出勤する担当する場所(複数)のデータ)
Foreign key (外部キー)を作る
では、FOREIGN KEYのあるテーブルを作ってみましょう。
CREATE TABLE post( id SERIAL PRIMARY KEY, name VARCHAR(255), content TEXT, user_id INT, CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES "user"(id) );
CONSTRAINTはデータベースにこのカラムが特別であることを教えてあげます。慣習的に外部キーを使う場合はfk_で名称を付けてあげます。
FOREIGN KEYが先ほど説明した外部キーのことです。user_idが外部キーになることを教えてあげます。
REFERENCEはどのテーブルのどのカラムが対象になるか指定してあげています。
テーブルができました。

データを追加する
データ外部キーの部分をuserテーブルidの1としてサンプルのデータを追加してみます。
INSERT INTO post (name, content, user_id) VALUES ('朝飯', '納豆でした', 1);
データが入りました。

しかし、このままだとユーザー1が誰か分かりませんね。
JOINのコマンドでデータを結合して表示させてみます。
SELECT * FROM "user" JOIN post ON post.user_id = "user".id;

これで外部キーが結合されたデータが表示されました。