Langsung ke konten utama
Halaman ini adalah “ERD ringan” untuk pembaca docs. Fokusnya bukan semua detail SQL, tetapi hubungan antar entitas dan kenapa tabel tertentu penting untuk produk.

Relasi inti

auth.users
├─ 1:1 profiles
├─ 1:1 subscriptions
├─ 1:1 user_roles
├─ 1:N payments
├─ 1:N ai_usage
└─ storage.objects (avatars) via profiles.avatar_path

subscriptions
└─ 1:N payments

payments
└─ 1:N webhook_events (secara operasional lewat external_id + provider)

Entitas identity dan access

Tabel atau areaFungsiDitulis olehDibaca oleh
auth.usersAkun auth SupabaseSupabase AuthSeluruh flow login-aware
profilesNama, avatar, metadata profiletrigger signup, POST /api/profiledashboard settings, avatar UI
user_rolesRole member atau admintrigger signup, admin role update/admin, guard admin

Entitas billing dan payment

TabelFungsiDitulis olehDibaca oleh
subscriptionsPlan aktif, status, periode, cancel statetrigger signup, webhook, manage subscriptiondashboard billing, AI plan lookup
paymentsRiwayat payment per orderPOST /api/payments, webhookdashboard billing, admin, order flow
webhook_eventsLedger event webhookwebhook Midtrans dan Dokuadmin dashboard, debugging operasional

Entitas growth dan operasional

TabelFungsiDitulis olehDibaca oleh
waitlistLead pre-launchPOST /api/waitlistoperasional growth
ai_usagePemakaian token AI per userAI routesAI limit check, analisis usage
rate_limit_bucketsRate limit persistenrate-limit RPCruntime rate limit
audit_logsJejak aksi pentingadmin, profile, payment flowadmin dashboard, investigasi

Storage avatar

AreaFungsiCatatan
bucket avatarsMenyimpan file avatar userpath ${userId}/avatar, ukuran max 2 MB
profiles.avatar_pathMenyimpan pointer objectdipakai untuk signed upload dan cleanup
profiles.avatar_urlMenyimpan URL avatar yang dipakai UIbisa berubah tergantung signed URL

Tabel yang paling sering disentuh saat custom

Kalau kamu ingin mengubahTabel yang kemungkinan terlibat
role dan akses adminuser_roles
katalog plan atau billingsubscriptions, payments
avatar dan profileprofiles, storage avatars
waitlist flowwaitlist
fitur AI premiumsubscriptions, ai_usage
observability operasionalwebhook_events, audit_logs

Pertanyaan desain yang sebaiknya dijawab sebelum ubah schema

  1. Apakah perubahan ini menambah entitas baru, atau cukup menambah field di tabel lama?
  2. Apakah data ini milik user, milik subscription, atau milik organisasi yang belum ada saat ini?
  3. Apakah perubahan ini ikut memengaruhi admin dashboard, audit log, atau webhook flow?
  4. Apakah RLS dan access control tetap masuk akal setelah schema berubah?
Kalau kamu perlu melihat file migration dan konteks operasionalnya, balik ke Database dan storage.