// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } enum Role { ADMIN CLUB_AADMIN DRIVER GUEST } enum Gender { MALE FEMALE } model User { id String @id @default(cuid()) username String @unique password String role Role @default(GUEST) driver Driver? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @@index([deletedAt]) } model Club { id String @id @default(cuid()) name String description String parentId String? parent Club? @relation("ClubHierarchy", fields: [parentId], references: [id], onDelete: Cascade) children Club[] @relation("ClubHierarchy") drivers Driver[] cars Car[] games Game[] comments Comment[] terms Term[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @@index([parentId]) @@index([deletedAt]) } model Driver { id String @id @default(cuid()) name String? gender Gender age Int bio String? clubId String club Club @relation(fields: [clubId], references: [id]) sorties Sortie[] comment Comment[] terms Term[] user User? @relation(fields: [userId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? userId String? @unique @@index([clubId]) @@index([deletedAt]) } model Car { id String @id @default(cuid()) model String number String name String clubId String club Club @relation(fields: [clubId], references: [id]) sorties Sortie[] comments Comment[] terms Term[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @@index([clubId]) @@index([deletedAt]) } model Game { id String @id @default(cuid()) name String startTime DateTime clubs Club[] sorties Sortie[] comments Comment[] terms Term[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? } model Sortie { id String @id @default(cuid()) totalTime Float score Float driverId String driver Driver @relation(fields: [driverId], references: [id]) carId String car Car @relation(fields: [carId], references: [id]) gameID String game Game @relation(fields: [gameID], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @@index([deletedAt]) } model Comment { id String @id @default(cuid()) content String clubId String club Club @relation(fields: [clubId], references: [id]) driverId String driver Driver @relation(fields: [driverId], references: [id]) carId String car Car @relation(fields: [carId], references: [id]) gameId String game Game @relation(fields: [gameId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @@index([deletedAt]) @@index([clubId]) @@index([gameId]) @@index([driverId]) } model Taxonomy { id String @id @default(cuid()) name String @unique deletedAt DateTime? createdAt DateTime @default(now()) terms Term[] @@index([deletedAt]) @@map("taxonomy") } model Term { id String @id @default(cuid()) name String taxonomy Taxonomy? @relation(fields: [taxonomyId], references: [id]) taxonomyId String? parentId String? parent Term? @relation("ChildParent", fields: [parentId], references: [id], onDelete: Cascade) children Term[] @relation("ChildParent") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? createdBy String? club Club[] driver Driver[] car Car[] game Game[] @@index([name]) // 对name字段建立索引,以加快基于name的查找速度 @@index([parentId]) // 对parentId字段建立索引,以加快基于parentId的查找速度 @@map("term") }