最初のレクチャーでリレーショナルデータベースとPostgreSQLの基礎、psqlやpgAdminの使い方、データベースの作成と管理をやったよね。じゃあ、いよいよリレーショナルDBの「建材」=テーブルを作っていこう。テーブルこそが、あとでフィルタしたりソートしたり結合したりできる情報を全部持ってるんだ。
PostgreSQLでテーブルを作るにはCREATE TABLEコマンドを使うよ。このコマンドでテーブルの構造(名前、カラム、データ型)を定義するんだ。
コマンドの基本構造
基本のシンタックスはこんな感じ:
CREATE TABLE テーブル (
カラム1 データ型 constraints,
カラム2 データ型 constraints,
...
);
パーツごとに見てみよう:
テーブル– テーブル名(例:students)。カラム1– カラム名(例:id、name)。データ型– カラムのデータ型(例:INTEGER、VARCHAR)。constraints– データの制約(例:NOT NULL、PRIMARY KEY)。
じゃあ、最初のテーブルを作ってみよう。
テーブル作成の例
シナリオ: 学習用DBに学生のデータを保存したい。そのためにstudentsテーブルを作るよ。フィールドは:
id: 学生のユニークID(自動で増える);name: 学生の名前(最大100文字の文字列);age: 学生の年齢(正の整数)。
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- 学生のユニークID
name VARCHAR(100), -- 名前
age INTEGER -- 年齢
);
ここで何が起きてるか:
id SERIAL PRIMARY KEY:idカラムが自動でユニークな数字(1, 2, 3...)を生成。しかもテーブルの主キーになる。name VARCHAR(100): テキストカラムで、VARCHAR(100)は最大100文字の文字列を意味する。age INTEGER: 年齢を保存する数値カラム。
このクエリをpsqlやpgAdminで実行すれば、studentsテーブルができるよ。
カラムのデータ型
テーブルを作るときは、各カラムに合ったデータ型を選ぶのが大事。PostgreSQLにはいろんな型があるけど、まずはよく使うやつから。
| データ型 | 説明 | 値の例 |
|---|---|---|
INTEGER |
整数。年齢、数、IDなどにピッタリ。 | 1, 42, 100 |
VARCHAR(n) |
n文字までの文字列。長さ制限のあるテキストに最適。 |
'Alice', 'Bob' |
TEXT |
無制限の文字列。長文(例:商品の説明)に使う。 | 'Very long text...' |
DATE |
時間なしの日付。誕生日やイベントの日付に。 | 2023-10-12 |
BOOLEAN |
論理型:TRUEかFALSE。フラグ(例:完了/未完了)に使う。 |
TRUE, FALSE |
データ型の選び方
- 数字を保存するなら
INTEGER。 - 長さが決まってる文字列なら
VARCHAR(n)。 - 制限なしのテキストなら
TEXT。 - 日付や時間は
DATEかTIMESTAMP。
例:coursesテーブルを作る
例えば、DBにコース情報も保存したいとしよう。各コースには:
id: ユニークID;name: コース名(最大100文字の文字列);description: コースの説明(長文);start_date: コース開始日。
SQLコード:
CREATE TABLE courses (
id SERIAL PRIMARY KEY, -- コースのユニークID
name VARCHAR(100), -- コース名
description TEXT, -- 説明
start_date DATE -- 開始日
);
実践課題
今度は君の番!課題はこちら:
teachersテーブルを作って、フィールドは:id: ユニークID。name: 先生の名前(最大50文字)。subject: 担当科目(最大50文字)。hire_date: 採用日。
実行用サンプルコード:
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
hire_date DATE
);
実行後、psqlで\d teachersコマンドを使って、テーブルができてるか確認してみて!
テーブル作成時によくあるミス
テーブル作り始めると、いろんなミスが出てくる。よくあるのは:
テーブル名やカラム名のミス。 PostgreSQLでは名前は大文字小文字区別しないけど、"で囲むときは注意。例えばCREATE TABLE "MyTable"だと"MyTable"ってテーブルができて、mytableは別物になる。
データ型の間違い。 存在しないデータ型を指定するとエラーになるよ。
CREATE TABLE example (
column1 STRANGE_TYPE
);
このクエリは失敗する。なぜならSTRANGE_TYPEなんて型はないから。
PRIMARY KEYの付け忘れ。 主キーを忘れてもテーブルはできるけど、行の特定が面倒になるよ。
GO TO FULL VERSION