PostgreSQL · Prisma · ERD

Database Schema

Seven tables, four enum types, UUID primary keys throughout. Designed for a tutor-student marketplace with bookings, availability, and a review system.

7Tables
4Enum types
11Relations
UUIDPrimary keys
Cascade deletes

Tables

user
idUUID @default(cuid())PK
nameString
emailString @unique
passwordString?
imageString?
emailVerifiedBoolean @default(false)
phoneString?
roleRoleENUM
statusUserStatusENUM
isBannedBoolean @default(false)
createdAtDateTime @default(now())
tutor_profile
idUUID @default(cuid())PK
userIdUUID @unique → user.idFK
titleString
bioText
educationString?
experienceInt
hourlyRateDecimal
languagesString[]
ratingDecimal @default(0)
totalReviewsInt @default(0)
isVerifiedBoolean @default(false)
category
idUUID @default(cuid())PK
nameString
slugString @unique
descriptionText?
iconString?
isActiveBoolean @default(true)
tutor_category junction
idUUID @default(cuid())PK
tutorProfileIdUUID → tutor_profile.idFK
categoryIdUUID → category.idFK
createdAtDateTime @default(now())
availability
idUUID @default(cuid())PK
tutorProfileIdUUID → tutor_profile.idFK
dayOfWeekDayOfWeekENUM
startTimeString
endTimeString
isActiveBoolean @default(true)
booking
idUUID @default(cuid())PK
studentIdUUID → user.idFK
tutorProfileIdUUID → tutor_profile.idFK
categoryIdUUID? → category.idFK
scheduledDateDateTime
durationInt (minutes)
totalPriceDecimal
statusBookingStatusENUM
meetingLinkString?
notesText?
cancellationReasonString?
review
idUUID @default(cuid())PK
bookingIdUUID @unique → booking.idFK
studentIdUUID → user.idFK
tutorProfileIdUUID → tutor_profile.idFK
ratingInt (1–5)
commentText?
createdAtDateTime @default(now())

Relationships

Enums

Role
STUDENT
TUTOR
ADMIN
UserStatus
ACTIVE
INACTIVE
BANNED
BookingStatus
PENDING
CONFIRMED
COMPLETED
CANCELLED
DayOfWeek
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY