PostgreSQLでクエリを書こう②

前回はクエリで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;

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