Schema · postgresql
SaaS
Organisaties, memberships, plannen en abonnementen voor multi-tenant SaaS.
saas
ERD
Samenvatting
5 modellen 27 velden 4 relaties
Een multi-tenant SaaS-basis: organisaties hebben members, kiezen een plan en houden een abonnement bij.
- Organization groepeert Memberships en Subscriptions.
- User kan lid zijn van meerdere organisaties via Membership (met
MemberRole). - Plan beschrijft prijs en interval; Subscription koppelt org aan plan met status.
Broncode
datasource db {
provider = "postgresql"
}
generator client {
provider = "prisma-client-js"
}
model Organization {
id String @id @default(cuid())
name String
slug String @unique
memberships Membership[]
subscriptions Subscription[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model User {
id String @id @default(cuid())
email String @unique
name String?
memberships Membership[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Membership {
id String @id @default(cuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
role MemberRole @default(MEMBER)
createdAt DateTime @default(now())
@@unique([organizationId, userId])
}
model Plan {
id String @id @default(cuid())
name String
slug String @unique
priceCents Int
interval BillingInterval
subscriptions Subscription[]
}
model Subscription {
id String @id @default(cuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
planId String
plan Plan @relation(fields: [planId], references: [id])
status SubscriptionStatus @default(TRIALING)
currentPeriodEnd DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum MemberRole {
OWNER
ADMIN
MEMBER
}
enum BillingInterval {
MONTHLY
YEARLY
}
enum SubscriptionStatus {
TRIALING
ACTIVE
PAST_DUE
CANCELLED
}