SQL DDLとCREATE TABLE
SQLはDDL(Data Definition Language)、DML(Data Manipulation Language)、DCL(Data Control Language)に大別されます。その中でDDLの基本がテーブルを作成するCREATE TABLE文です。
基本構文
CREATE TABLE テーブル名 (
カラム名 データ型 [制約],
...
[テーブルレベルの制約]
);
よく使うデータ型
VARCHAR(n): 可変長文字列TEXT: 大量テキストINTEGER: 整数DECIMAL(p, s): 精密な小数(金額に使用)TIMESTAMPTZ: タイムゾーン付きタイムスタンプUUID: 一意識別子BOOLEAN: 真偽値
主要な制約
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
外部キー
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
total_amount DECIMAL(15, 2) NOT NULL,
CONSTRAINT fk_orders_user
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE RESTRICT
);
実践例:ブログシステム
CREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
author_id UUID NOT NULL,
title VARCHAR(300) NOT NULL,
content TEXT NOT NULL,
status VARCHAR(20) DEFAULT 'draft'
CHECK (status IN ('draft', 'published', 'archived')),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE RESTRICT
);
-- インデックスを追加
CREATE INDEX idx_posts_author ON posts(author_id);
CREATE INDEX idx_posts_status ON posts(status);
ERDからSQLを自動生成
Erdmatesを使えば、視覚的にERDを設計した後、PostgreSQL、MySQL、SQLiteなど様々なデータベース方言に合ったCREATE TABLE SQLをワンクリックで自動生成できます。
まとめ
CREATE TABLEはデータベース開発の第一歩です。制約を活用してデータ整合性を保証し、命名規則を一貫して維持することが良いスキーマの核心です。