Back to Documentation
Database
Set up databases, run migrations, and manage your data layer
Supported Databases
Choose your preferred database during project initialization
PostgreSQL
Production-ready, highly reliable relational database
servcraft init my-app --prisma postgresMySQL
Popular open-source relational database
servcraft init my-app --prisma mysqlSQLite
Lightweight, file-based database for development
servcraft init my-app --prisma sqliteMongoDB
NoSQL document database for flexible schemas
servcraft init my-app --prisma mongodbDatabase Commands
Manage your database with these commands
servcraft db pushPush schema changes to database
npm run db:pushservcraft db migrateRun Prisma migrations
npm run db:migrateservcraft db generateGenerate Prisma client
npm run db:generateservcraft db seedRun database seeders
npm run db:seedservcraft db resetReset database (dangerous!)
npm run db:resetservcraft db studioOpen Prisma Studio UI
npm run db:studioservcraft db statusShow migration status
npm run db:statusPrisma Schema
Define your database models in Prisma schema
prisma/schema.prisma
1// prisma/schema.prisma23generator client {4provider = "prisma-client-js"5}67datasource db {8provider = "postgresql"9url = env("DATABASE_URL")10}1112model User {13id String @id @default(cuid())14email String @unique15name String?16password String17role Role @default(USER)18createdAt DateTime @default(now())19updatedAt DateTime @updatedAt2021@@map("users")22}2324model Post {25id String @id @default(cuid())26title String27content String28published Boolean @default(false)29authorId String30author User @relation(fields: [authorId], references: [id])31createdAt DateTime @default(now())32updatedAt DateTime @updatedAt3334@@map("posts")35}3637enum Role {38USER39ADMIN40}
Environment Variables
.env
1# Database Connection2DATABASE_URL="postgresql://user:password@localhost:5432/servcraft?schema=public"34# For MySQL5# DATABASE_URL="mysql://user:password@localhost:3306/servcraft"67# For SQLite8# DATABASE_URL="file:./dev.db"910# For MongoDB11# DATABASE_URL="mongodb://user:password@localhost:27017/servcraft"
Best Practices
Follow these guidelines for optimal database usage
Use migrations for schema changes
Never edit schema directly in production
Keep models focused
Each model should have a single responsibility
Use relations wisely
Define proper foreign keys and indexes
Seed your database
Use seed files for test data
Connection Pooling
Optimize database connections for high-traffic applications
Connection Pool Configuration
1// For high-traffic applications, configure connection pooling2// in prisma/schema.prisma:34generator client {5provider = "prisma-client-js"6previewFeatures = ["driverAdapters"]7}89// In your app startup (src/app.ts):10import { PrismaClient } from '@prisma/client';1112const prisma = new PrismaClient({13datasources: {14db: {15url: process.env.DATABASE_URL,16},17},18// Connection pool settings19__internal: {20engine: {21adapter: undefined, // Use adapter for better pooling22},23},24});2526// Or use PgBouncer for PostgreSQL27// DATABASE_URL="postgresql://.../servcraft?pool_timeout=10&connection_limit=10"
Database Migrations
Manage schema changes safely across environments
Working with Migrations
1// Creating a migration2npm run db:migrate34// This creates files in prisma/migrations/5// 20231201120000_add_user_profile/6// └── migration.sql78// Sample migration.sql:9-- Add profile fields to User model10ALTER TABLE "users" ADD COLUMN "bio" TEXT;11ALTER TABLE "users" ADD COLUMN "avatar_url" VARCHAR(255);12ALTER TABLE "users" ADD COLUMN "updated_at" TIMESTAMP;1314-- Create index for faster queries15CREATE INDEX "idx_users_email" ON "users"("email");1617// To reset database (development only!)18npm run db:reset1920// To view migration status21npm run db:status