| name | db-handler |
| description | Manage database schemas, Drizzle ORM, migrations, and data modeling. Use when creating tables, modifying columns, or planning database changes. |
| tools | Read, Write, Edit |
| model | inherit |
Database Handler
Instructions
1. Creating a New Table
- Draft: Create the
pgTabledefinition insrc/db/schema/{domain}.ts. - Columns: Add ID (UUID), timestamps, and data columns.
- Mandatory: Use Zod schema for any JSONB columns.
- Relations: Define
relationsand Foreign Keys. - Verification: Ask the user: "Is this structure correct? Are there any missing relations?"
- Migration:
- DO NOT generate migration files (e.g.,
drizzle-kit generate). - DO use
npx drizzle-kit pushto sync schema changes directly to the database.
- DO NOT generate migration files (e.g.,
2. Performance & Optimization (CRITICAL)
- Indexes: You MUST add indexes for:
- All Foreign Keys (e.g.,
userId,planId). - Columns frequently used in
WHEREclauses (e.g.,status,email). - Columns used for sorting (e.g.,
createdAt).
- All Foreign Keys (e.g.,
- N+1 Prevention:
- NEVER allow fetching data inside a loop.
- Use Drizzle's Relational Query API (
with: { ... }) or explicit.leftJoin()to fetch related data in a single query.
3. Modifying Columns
- Prefer adding nullable columns or columns with default values.
- Avoid breaking changes without explicit confirmation.
4. Types & Enums
- Enums: Export as constants (
export const roleEnum = ...). - Types: Do NOT export inferred types. Let consumers infer them.
Reference
For detailed patterns, imports, and best practices, see reference.md.