Skip to main content
squid·ware

Schema · postgresql

E-commerce

Producten, klanten, winkelwagen en orders voor een webshop-foundation.

commerce

ERD

Mini Map

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
}