スキーマとテーブル設計

SQL が遅い、整合性が崩れる、改修が辛いといった問題の多くは設計段階で決まります。Oracle 固有機能に入る前に、設計の土台を固めます。

スキーマ設計

機能単位でスキーマを分けると管理しやすくなります。監査テーブルやバッチ作業用テーブルも早い段階で分離方針を決めます。

PK/FK 設計

CREATE TABLE departments (
  department_id NUMBER(10) PRIMARY KEY,
  department_name VARCHAR2(100) NOT NULL
);

CREATE TABLE employees (
  employee_id NUMBER(10) PRIMARY KEY,
  department_id NUMBER(10) NOT NULL,
  employee_name VARCHAR2(120) NOT NULL,
  CONSTRAINT fk_emp_dept FOREIGN KEY (department_id)
    REFERENCES departments (department_id)
);

データ型

用途注意点
NUMBER(p,s)金額・数量桁数不足を避ける
VARCHAR2(n)可変長文字列バイト数と文字数を意識
DATE日時時刻を含む

インデックス基本

CREATE INDEX idx_emp_department_id ON employees (department_id);
CREATE INDEX idx_orders_created_at ON orders (created_at);

インデックスは「検索速度向上」と「更新コスト増加」のトレードオフです。用途を決めてから追加します。