Database with PostgreSQL & Prisma
Robust, scalable database solution with type-safe ORM
PostgreSQL is a robust, open-source relational database, perfect for complex data models in e-commerce (orders, products) and social media (users, posts). It offers excellent performance, ACID compliance, and advanced features like JSON support and full-text search.
Prisma simplifies database operations with a TypeScript-friendly ORM, generating type-safe queries for Hono.js APIs. Chosen for scalability, reliability, and your prior experience with PostgreSQL and Prisma in full-stack projects.
- ACID Compliance
Reliable transactions for e-commerce
- JSON Support
Flexible data structures when needed
- Full-Text Search
Built-in search capabilities
- Scalability
Handles large datasets efficiently
- Type Safety
Auto-generated TypeScript types
- Database Migrations
Version-controlled schema changes
- Query Builder
Intuitive, type-safe query API
- Database Introspection
Generate schema from existing databases
- • User: Customer accounts and profiles
- • Product: Catalog items with variants
- • Order: Purchase transactions
- • Cart: Shopping cart items
- • Payment: Transaction records
- • Review: Product ratings and feedback
- • User: User profiles and settings
- • Post: Content and media posts
- • Comment: Post interactions
- • Like: Engagement tracking
- • Follow: User relationships
- • Notification: Activity alerts
Installation
npm install @prisma/client
npx prisma init
Schema Example (schema.prisma)
model User {
id String @id @default(cuid())
email String @unique
name String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
orders Order[]
cart CartItem[]
reviews Review[]
}
model Product {
id String @id @default(cuid())
name String
description String?
price Decimal
imageUrl String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
orderItems OrderItem[]
cartItems CartItem[]
reviews Review[]
}
model Order {
id String @id @default(cuid())
userId String
total Decimal
status String
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
items OrderItem[]
}
Usage in Hono.js API
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// Get all products
app.get('/api/products', async (c) => {
const products = await prisma.product.findMany({
include: {
reviews: {
select: {
rating: true
}
}
}
})
return c.json(products)
})
// Create new order
app.post('/api/orders', async (c) => {
const { userId, items } = await c.req.json()
const order = await prisma.order.create({
data: {
userId,
items: {
create: items
}
},
include: {
items: {
include: {
product: true
}
}
}
})
return c.json(order)
})