いつ読むか?

  • 「ユーザー」に関するテーブル (データモデル) を設計するとき

読書メモ

設計の3原則

  1. 状態ごとにテーブル分割 - 状態カラムを持たず user_active / user_leave のように分ける
  2. 親テーブルは変更最小化 - users は INSERT のみで UPDATE/DELETE を避けデッドロック回避
  3. 詳細は子テーブルに - user_detail に付属情報を分離し競合を減らす

テーブル構成例

  • users: 基本レコード(変更しない)
  • user_detail: 住所など低頻度変更の情報
  • user_active / user_leave: 状態別テーブル
  • user_token / user_auth_log: 認証・ログ

JSONB活用

PostgreSQL の JSONB 型で properties(必須)と option(任意)を柔軟に格納

留意点

トレードオフの設計。状態排他制御の複雑さ、履歴管理の困難さ、大規模データでのパフォーマンス低下などの課題あり。