Database Expert

The Database Expert agent specializes in database design, optimization, and data management.

Expertise Areas#

  • Schema Design - Normalization, relationships, constraints
  • Query Optimization - Indexes, execution plans, performance
  • ORMs - Prisma, Drizzle, TypeORM, Sequelize
  • Migrations - Schema versioning, rollbacks, data migrations
  • SQL - Complex queries, CTEs, window functions
  • NoSQL - MongoDB, Redis, DynamoDB
  • Data Modeling - ERD design, domain modeling

Usage Examples#

Schema Design#

Use the database-expert agent to design a schema for an e-commerce platform with: - Users and authentication - Products with categories - Orders and order items - Reviews and ratings

Response includes:

  • Complete schema design
  • Relationship definitions
  • Index recommendations
  • Constraint definitions

Query Optimization#

Use the database-expert agent to optimize this slow query: SELECT * FROM orders JOIN order_items ON orders.id = order_items.order_id WHERE orders.created_at > '2024-01-01'

Response includes:

  • Query analysis
  • Index suggestions
  • Optimized query
  • Execution plan explanation

Prisma Schema#

Use the database-expert agent to create a Prisma schema for a social media app.

Response includes:

  • Model definitions
  • Relations setup
  • Enum types
  • Index decorators

Best Practices Applied#

1. Schema Design#

  • Proper normalization (usually 3NF)
  • Appropriate denormalization for performance
  • Consistent naming conventions
  • Proper use of constraints

2. Performance#

  • Strategic index placement
  • Covering indexes
  • Query analysis
  • Connection pooling

3. Data Integrity#

  • Foreign key constraints
  • Check constraints
  • Unique constraints
  • Default values

4. Scalability#

  • Partitioning strategies
  • Sharding considerations
  • Read replicas
  • Caching layers

Common Patterns#

Prisma Schema Example#

1model User { 2 id String @id @default(cuid()) 3 email String @unique 4 name String? 5 posts Post[] 6 profile Profile? 7 createdAt DateTime @default(now()) 8 updatedAt DateTime @updatedAt 9 10 @@index([email]) 11} 12 13model Post { 14 id String @id @default(cuid()) 15 title String 16 content String? 17 published Boolean @default(false) 18 author User @relation(fields: [authorId], references: [id]) 19 authorId String 20 tags Tag[] 21 createdAt DateTime @default(now()) 22 updatedAt DateTime @updatedAt 23 24 @@index([authorId]) 25 @@index([published, createdAt]) 26} 27 28model Tag { 29 id String @id @default(cuid()) 30 name String @unique 31 posts Post[] 32}

Migration Strategy#

1// 1. Create migration 2npx prisma migrate dev --name add_user_roles 3 4// 2. Data migration (if needed) 5async function migrateData() { 6 await prisma.$transaction(async (tx) => { 7 // Update existing users 8 await tx.user.updateMany({ 9 where: { role: null }, 10 data: { role: 'USER' }, 11 }); 12 }); 13} 14 15// 3. Deploy migration 16npx prisma migrate deploy

Index Strategy#

1-- Primary lookup index 2CREATE INDEX idx_orders_user_id ON orders(user_id); 3 4-- Covering index for common query 5CREATE INDEX idx_orders_status_created 6ON orders(status, created_at) 7INCLUDE (total, user_id); 8 9-- Partial index for active records 10CREATE INDEX idx_users_active 11ON users(email) 12WHERE deleted_at IS NULL;

Database-Specific Guidance#

PostgreSQL#

  • JSON/JSONB usage
  • Full-text search
  • Extensions (PostGIS, pgvector)
  • Connection pooling (PgBouncer)

MySQL#

  • InnoDB vs MyISAM
  • Character sets
  • Replication setup
  • Query cache

MongoDB#

  • Document design
  • Aggregation pipelines
  • Indexing strategies
  • Sharding

Redis#

  • Data structures
  • Caching patterns
  • Pub/Sub
  • Persistence options

Sample Prompts#

TaskPrompt
Schema design"Design a schema for a multi-tenant SaaS application"
Optimization"Optimize queries for a reporting dashboard"
Migration"Create a migration to add soft deletes to all tables"
Indexing"Recommend indexes for these common query patterns"
Relationships"Model a many-to-many relationship with metadata"

Configuration#

1// bootspring.config.js 2module.exports = { 3 agents: { 4 customInstructions: { 5 'database-expert': ` 6 - Use Prisma as the ORM 7 - Follow PostgreSQL best practices 8 - Include index recommendations 9 - Consider query performance 10 - Use soft deletes where appropriate 11 `, 12 }, 13 }, 14 stack: { 15 database: ['postgresql', 'prisma'], 16 }, 17};