Schema · postgresql
E-commerce
Producten, klanten, winkelwagen en orders voor een webshop-foundation.
commerce
ERD
Samenvatting
6 modellen 30 velden 6 relaties
Een webshop-foundation: klanten hebben een winkelwagen, producten komen in cart- en orderregels, en orders houden status en totaalbedrag bij.
- Customer heeft optioneel één Cart en meerdere Orders.
- Product verschijnt in CartItem en OrderItem.
- Order koppelt klant, status (
OrderStatus) en regelitems met vastgelegde prijs.
Broncode
datasource db {
provider = "postgresql"
}
generator client {
provider = "prisma-client-js"
}
model Customer {
id String @id @default(cuid())
email String @unique
name String
cart Cart?
orders Order[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Product {
id String @id @default(cuid())
sku String @unique
name String
description String?
priceCents Int
cartItems CartItem[]
orderItems OrderItem[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Cart {
id String @id @default(cuid())
customerId String @unique
customer Customer @relation(fields: [customerId], references: [id])
items CartItem[]
updatedAt DateTime @updatedAt
}
model CartItem {
id String @id @default(cuid())
cartId String
cart Cart @relation(fields: [cartId], references: [id])
productId String
product Product @relation(fields: [productId], references: [id])
quantity Int @default(1)
@@unique([cartId, productId])
}
model Order {
id String @id @default(cuid())
customerId String
customer Customer @relation(fields: [customerId], references: [id])
status OrderStatus @default(PENDING)
totalCents Int
items OrderItem[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model OrderItem {
id String @id @default(cuid())
orderId String
order Order @relation(fields: [orderId], references: [id])
productId String
product Product @relation(fields: [productId], references: [id])
quantity Int
priceCents Int
}
enum OrderStatus {
PENDING
PAID
SHIPPED
CANCELLED
}