Why Drizzle ORM?
Drizzle was chosen for ShipFree because it offers:Type Safety
Full TypeScript inference with autocomplete
SQL-like API
Familiar SQL syntax for developers
Performance
Zero runtime overhead, compiles to raw SQL
Migrations
Automatic migration generation from schema changes
Database Connection
The database connection is configured insrc/database/index.ts:
src/database/index.ts
The database client uses connection pooling automatically for better performance in serverless environments.
Database Schema
The complete schema is defined insrc/database/schema.ts:
View Complete Schema
View Complete Schema
src/database/schema.ts
Schema Features
Auto-updating Timestamps
src/database/schema.ts
Database Indexes
Indexes improve query performance for frequently accessed fields:src/database/schema.ts
Foreign Key Constraints
src/database/schema.ts
Querying Data
Basic Queries
- Find One
- Find Many
- Select Specific Fields
- Complex Where
Relations & Joins
Inserting Data
- Insert One
- Insert Multiple
- Upsert (On Conflict)
Updating Data
Deleting Data
Transactions
Use transactions to ensure data consistency:If any operation in the transaction fails, all changes are rolled back automatically.
Migrations
Generate Migration
After modifying This creates a new migration file in the
src/database/schema.ts, generate a migration:migrations/ directory.Migration Configuration
drizzle.config.ts
Type Safety
Drizzle provides full TypeScript inference:Database Utilities
Query Builder
Aggregations
Best Practices
Use Indexes
Add indexes to frequently queried fields for better performance
Batch Operations
Use bulk inserts/updates instead of multiple individual queries
Use Transactions
Wrap related operations in transactions to maintain consistency
Type Everything
Leverage TypeScript inference to catch errors at compile time
Environment Variables
.env
Further Reading
Drizzle Docs
Official Drizzle ORM documentation
Query Examples
Learn about advanced queries
Migrations Guide
Master database migrations
PostgreSQL Docs
PostgreSQL official documentation