Skip to main content

データベーススキーマ

Jeliqで生成されるデータベースの構造と設計について解説します。

使用するデータベース

JeliqはSupabase(PostgreSQL)を使用します。
項目
DBMSPostgreSQL 15
サービスSupabase
接続方式Supabase Client

スキーマ構造

認証関連(Supabase管理)

Supabaseが管理する認証スキーマ(authスキーマ)。
-- Supabaseが自動管理
auth.users
auth.sessions
auth.refresh_tokens

アプリケーションテーブル(publicスキーマ)

仕様書のデータモデルから生成されるテーブル。 例:顧客テーブル
CREATE TABLE customers (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id),
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  phone VARCHAR(50),
  status VARCHAR(50) DEFAULT 'active',
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- インデックス
CREATE INDEX idx_customers_user_id ON customers(user_id);
CREATE INDEX idx_customers_status ON customers(status);

Row Level Security (RLS)

各テーブルにはRLSが設定され、ユーザーは自分のデータのみアクセスできます。
-- RLS有効化
ALTER TABLE customers ENABLE ROW LEVEL SECURITY;

-- ポリシー例
CREATE POLICY "Users can view own customers" ON customers
  FOR SELECT USING (auth.uid() = user_id);

CREATE POLICY "Users can insert own customers" ON customers
  FOR INSERT WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Users can update own customers" ON customers
  FOR UPDATE USING (auth.uid() = user_id);

CREATE POLICY "Users can delete own customers" ON customers
  FOR DELETE USING (auth.uid() = user_id);

マイグレーション

supabase/migrations/ディレクトリにマイグレーションファイルが格納されています。
supabase/migrations/
├── 20240101000000_create_customers.sql
├── 20240101000001_create_orders.sql
└── 20240101000002_add_indexes.sql

型定義

TypeScript用の型定義が自動生成されます。
// types/database.types.ts
export interface Database {
  public: {
    Tables: {
      customers: {
        Row: {
          id: string
          user_id: string
          name: string
          email: string
          phone: string | null
          status: string
          created_at: string
          updated_at: string
        }
        Insert: { ... }
        Update: { ... }
      }
    }
  }
}

カスタマイズ

スキーマの変更方法についてはカスタマイズガイドを参照してください。