運用と注意点

本番運用に必要な観点を一挙に。バックアップ、マイグレーション、セキュリティ、監視、コスト、選定基準。

バックアップ

マイグレーション

セキュリティ

多テナント設計の選び方

  1. 共有テーブル + tenant_id + RLS(推奨。SaaS の標準)
  2. スキーマ分離(中規模・分離度向上)
  3. DB 完全分離(高分離・高コスト・コンプライアンス)

NULL と空文字

時刻の扱い

SQL Injection 対策

絶対 NG

// ユーザ入力を直接埋め込み
sql.unsafe(`SELECT * FROM users WHERE email = '${email}'`)

OK(プレースホルダ)

// pg
client.query("SELECT * FROM users WHERE email = $1", [email])

// postgres.js
sql`SELECT * FROM users WHERE email = ${email}`

// Prisma(ORM 経由なら基本安全)
prisma.user.findUnique({ where: { email } })

パスワード保存

import bcrypt from "bcrypt"

// 保存時
const hash = await bcrypt.hash(password, 12)

// 検証時
const ok = await bcrypt.compare(password, user.password_hash)

機密列の扱い

監視

コスト最適化

環境分離

選定の指針(2026 年時点)

個人開発 / プロトタイピング

小〜中規模 SaaS

中〜大規模

超大規模

移行時のポイント

「DB 入門」のおすすめ進路

  1. SQLite + SQL を 1 ヶ月触る
  2. Postgres + DBeaver で GUI に慣れる
  3. EXPLAIN を読めるようになる
  4. RLS / トランザクションの実装を 1 つ作る
  5. Supabase / Neon で本番デプロイ
  6. 運用ノウハウは事故から学ぶ(小さく失敗)

関連書籍 / 学習リソース

本セクションの総まとめ

  1. RDB(特に Postgres)を主軸に置く
  2. 正規化 + 必要最小限の非正規化
  3. 主キー / FK / NOT NULL / UNIQUE / CHECK で品質を守る
  4. FK 列にはインデックス必須
  5. トランザクション短く、外部 API 呼び出しは外
  6. EXPLAIN ANALYZE を読めるように
  7. マネージド DB を活用、事故は前提に設計
最後に

DB はアプリの寿命を決める。コードは書き直せるが、データは失えない。 「測って・小さく試して・記録する」習慣を持てば、複雑な選定も現実的にこなせる。