Skip to content
Agentmart
Submit a tool

database-design

PostgreSQL schema design, indexing strategies, migration patterns, and connection pooling for production workloads.

Skill by NasserJabir

IndexedMIT★ 3
Write a review

Chalk Labs

Need help deploying database-design?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/nasserjabir-database-design

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

PostgreSQL schema design, indexing strategies, migration patterns, and connection pooling for production workloads.

Use cases: design, backend

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/database-design

What's inside

Skill name
database-design
Description
PostgreSQL schema design, indexing strategies, migration patterns, and connection pooling for production workloads.
License
MIT
Instructions
95 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Database Design

## Description
Practical guidance for designing, migrating, and operating PostgreSQL databases in production: normalized schema design, index selection, migration safety, and connection pool tuning. Derived from vasilyu1983/ai-agents-public.

## When to Activate
- Designing new database schemas or tables
- Writing or reviewing SQL migrations
- Optimizing slow queries or adding indexes
- Configuring connection pooling (PgBouncer, pgpool)
- Implementing multi-tenant data isolation
- Reviewing database changes for production safety

## Process

### 1. Schema Design
- Normalize to 3NF by default; denormalize only with measured justification
- Use appropriate data types: `timestamptz` over `timestamp`, `text` over `varchar(n)` unless length is a true constraint
- Define `NOT NULL` constraints; use `DEFAULT` values intentionally
- Add `CHECK` constraints for domain rules at the database level
- Use `UUID` v7 (time-ordered) for distributed primary keys; `BIGSERIAL` for single-node
- Create junction tables for many-to-many relationships with explicit foreign keys
- Always define `ON DELETE` / `ON UPDATE` actions for foreign keys

### 2. Indexing Strategy
- Index columns used in `WHERE`, `JOIN`, and `ORDER BY` clauses
- Prefer composite indexes with leading-column selectivity (most selective first)
- Use partial indexes for common filtered queries
- Use covering indexes (INCLUDE) to avoid heap lookups for read-heavy paths
- Avoid over-indexing: each index slows writes and consumes storage
- Monitor `pg_stat_user_indexes` to find unused indexes; drop them

### 3. Migration Safety
- Never deploy a migration that drops a column AND removes its code references simultaneously
- Use expand-and-contract pattern: add new column → backfill → deploy code → drop old column
- Write reversible migrations (up/down) for all schema changes
- Test migrations on a production-representative dataset before deploying
- Lock tables explicitly only when necessary; prefer `ALTER TABLE ... ADD COLUMN` without locks
- Use `NOT VALID` + `VALIDATE CONSTRAINT` for large constraint additions

### 4. Connection Pooling
- Use PgBouncer in transaction mode for stateless application pools
- Pool size: `connections = (cpu_cores * 2) + effective_spindle_count` (rule of thumb)
- Set `idle_in_transaction_session_timeout` to prevent abandoned transactions
- Monitor `pg_stat_activity` for connection leaks
- Use `SET LOCAL` for per-transaction settings; avoid `SET` which leaks across transactions

### 5. Query Optimization
- Use `EXPLAIN (ANALYZE, BUFFERS)` to inspect query plans
- Avoid `SELECT *`; specify columns explicitly
- Use `LIMIT` for pagination; avoid `OFFSET` for large offsets (use keyset pagination)
- Replace correlated subqueries with `JOIN` or lateral joins
- Batch inserts with `INSERT ... VALUES (...), (...), ...` or `COPY`

## Quality Criteria
- All tables have primary keys and explicit foreign key constraints
- No missing indexes on foreign keys (joins are covered)
- Migrations are reversible and tested on representative data
- Connection pool is configured and monitored
- No `SELECT *` in production query paths
- Slow query log is monitored; queries > 100ms are investigated

## References
- [vasilyu1983/ai-agents-public — Database Design](https://github.com/vasilyu1983/ai-agents-public)
- [PostgreSQL Documentation](https://www.postgresql.org/docs/)
- [PgBouncer Documentation](https://www.pgbouncer.org/config.html)
- [Use The Index, Luke](https://use-the-index-luke.com/)
- [PostgreSQL Wiki — Performance Optimization](https://wiki.postgresql.org/wiki/Performance_Optimization)

## Examples

### Expand-and-Contract Migration
```sql
-- Step 1: Add new column (expand)
ALTER TABLE users ADD COLUMN email_normalized text;

-- Step 2: Backfill
UPDATE users SET email_normalized = lower(trim(email)) WHERE email_normalized IS NULL;

-- Step 3: Deploy code that writes to both columns

-- Step 4: Add NOT NULL after backfill completes
ALTER TABLE users ALTER COLUMN email_normalized SET NOT NULL;

-- Step 5: Drop old column in a later release (contract)
-- ALTER TABLE users DROP COLUMN email;
```

### Composite Index for Keyset Pagination
```sql
-- Supports: SELECT * FROM orders WHERE created_at > $1 ORDER BY created_at, id LIMIT 50
CREATE INDEX idx_orders_created_id ON orders (created_at, id);
```

From NasserJabir/NassAI-Praxis, MIT.

More from NasserJabir/NassAI-Praxis

Signals

Stars
3
Forks
0
Open issues
0
Last commit (this folder)
Aug 24, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from NasserJabir

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get database-design running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying database-design?

CallGet help
Cite this page

database-design skill. Agent Mart. https://agentmart.dev/skills/nasserjabir-database-design (last updated 2026-10-24)