Skip to content

データベース設計

主要エンティティ

users(ユーザー)

Supabase Auth と連携。userType で役割を区別します。

カラム説明
iduuidSupabase Auth UID
emailtextメールアドレス
userTypeenumgeneral / operator / admin
created_attimestamptz作成日時(UTC)

companies(事業者)

店舗を束ねる上位エンティティ。

カラム説明
iduuidPK
nametext事業者名
owner_iduuid代表ユーザー
created_attimestamptz作成日時(UTC)

venues(店舗)

1事業者が複数店舗を持てる構造。

カラム説明
iduuidPK
company_iduuid所属事業者
nametext店舗名
addresstext住所
deleted_attimestamptz論理削除日時

設計上の判断

ステータスは計算で導出する

status カラムは持たず、start_at / end_at から導出します。

ts
// ❌ DB に status を持つ
{ status: 'ongoing' }

// ✅ 計算で導出
const isOngoing = event.start_at <= now && now <= event.end_at

論理削除

重要なデータ(venues, events)は物理削除せず deleted_at IS NULL でフィルタします。

sql
-- 有効な店舗のみ取得
SELECT * FROM venues WHERE deleted_at IS NULL;