Skip to main content
Architecture

Designing a 185-Table Database Schema: Lessons from Building Nexural

April 22, 202612 min read
PostgreSQLDatabase DesignSupabaseSchemaFinTechMigrations
Share:

When people hear "185 database tables," they assume complexity for complexity's sake. But every table exists because a business requirement demanded it.

Here's how I designed the Nexural schema — the decisions that worked, the ones I'd change, and the patterns that scale.

Phase-Based Schema Design

I didn't design 185 tables on day one. The schema grew across 7 phases, each adding a domain:

Phase Domain Tables Key Decision
1 Auth & Users 12 Supabase Auth + custom profiles
2 Subscriptions 8 Stripe webhook-driven state machine
3 Trading 35 Instruments, positions, signals, watchlists
4 Community 25 Discord sync, moderation logs, reputation
5 Analytics 30 Metrics, reports, telemetry events
6 Research 40 Strategies, indicators, backtest results
7 Operations 35 Alerts, newsletters, audit logs

Each phase had its own migration batch. I never modified tables from a previous phase during a new phase's development. This kept deployments safe.

The Three Rules I Followed

Rule 1: Normalize Everything Except Hot Paths

The canonical data is always normalized. \

Related reading

All posts →
Jason Teixeira
Written by
Jason Teixeira
Founder, Sage Ideas Studio
More about Jason →

Want to see this in action?

Check out the projects and case studies behind these articles.

livebuild 29be8ec2026-06-11 06:38Z
// solo studio// no analytics resold// every commit human-reviewed