SQL CREATE TABLEとデータ型・制約

SQL CREATE TABLEの構文を学びます。主要なデータ型、PRIMARY KEY、FOREIGN KEY、NOT NULL、デフォルト値、CHECK制約によるスキーマ設計を解説します。

DDL

詳細な説明

SQL CREATE TABLEとデータ型・制約

CREATE TABLE 文は、カラム、データ型、データの整合性を保証する制約を含む新しいテーブルの構造を定義します。

基本構文

CREATE TABLE employees (
  id          SERIAL PRIMARY KEY,
  name        VARCHAR(100) NOT NULL,
  email       VARCHAR(255) UNIQUE NOT NULL,
  department  VARCHAR(50) DEFAULT 'Unassigned',
  salary      DECIMAL(10, 2) CHECK (salary >= 0),
  hire_date   DATE NOT NULL DEFAULT CURRENT_DATE,
  manager_id  INTEGER REFERENCES employees(id),
  created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

主要なデータ型

用途
INTEGER / BIGINT 整数、ID
DECIMAL(p,s) 正確な数値(金額など)
VARCHAR(n) 可変長文字列
TEXT 無制限長の文字列
BOOLEAN 真偽値
DATE / TIMESTAMP 日付と時刻
UUID ユニバーサル一意識別子
JSONB 半構造化データ(PostgreSQL)

インライン制約とテーブルレベル制約

CREATE TABLE order_items (
  id         SERIAL PRIMARY KEY,
  order_id   INTEGER NOT NULL,
  product_id INTEGER NOT NULL,
  quantity   INTEGER NOT NULL CHECK (quantity > 0),
  price      DECIMAL(10, 2) NOT NULL,
  FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
  FOREIGN KEY (product_id) REFERENCES products(id),
  UNIQUE (order_id, product_id)
);

一時テーブル

CREATE TEMPORARY TABLE temp_results AS
SELECT * FROM large_table WHERE condition = true;

ベストプラクティス

  • 必ずPRIMARY KEYを定義する(シンプルさのためにサロゲートキーを推奨)
  • カラムが本当に欠損値を許容する場合を除き、NOT NULLを使用する
  • ストレージの節約とパフォーマンス向上のため、適切な最小のデータ型を選択する
  • 金額データにはDECIMALを使用する(FLOATやDOUBLEは使用しない)
  • ビジネスルールをデータベースレベルで強制するためにCHECK制約を追加する
  • 参照整合性を維持するために外部キーを定義する
  • デバッグやマイグレーション管理を容易にするため、制約に明示的な名前を付ける

適切に設計されたCREATE TABLE文は、信頼性の高いパフォーマンスの良いデータベーススキーマの基盤です。

ユースケース

開発チームが新しいSaaSアプリケーションのデータベーススキーマを設計し、適切なデータ型、外部キー関係、ビジネスルールを強制するチェック制約を持つテーブルを定義する場面。

Try It — SQL Formatter

フルツールを開く