如何在 Prisma 中模拟锦标赛

How to model a tournament in Prisma

我想在 Prisma 中模拟锦标赛。我有这个:

model Tournament {
  id      Int     @id @default(autoincrement())
  meets   Meet[]
}

model Meet {
  id      Int     @id @default(autoincrement())
  name    String
  matches Match[]
}

model Match {
  id            Int     @id @default(autoincrement())
  player1Id     Int
  player2Id     Int
  meet          Meet @relation(fields: [meetId], references: [id])
  meetId        Int
}

model Player {
  id    Int     @id @default(autoincrement())
  name  String
}

model Result {
  id        Int     @id @default(autoincrement())
  matchId    Int
  playerId  Int
}

我觉得 Match 模型可能需要 link player1 和 player2(具有关系)到 Player 模型。我也不确定结果应该如何建模。

如有任何建议,我们将不胜感激。

您可以按照以下方式进行:

datasource mysql {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

generator erd {
  provider = "prisma-erd-generator"
  output = "./entity-relationship-diagram.svg"
}

model Tournament {
  id      Int     @id @default(autoincrement())
  name String
  meets   Meet[] @relation()
}

model Meet {
  id      Int     @id @default(autoincrement())
  name    String
  tournament Tournament @relation(fields: [tournamentId], references: [id])
  tournamentId Int
  matches Match[] @relation()
}

model Match {
  id            Int     @id @default(autoincrement())
  name          String
  meeet        Meet    @relation(fields: [meetId], references: [id])
  meetId       Int
  players      Player[] @relation("matchPlayers", fields: [playerId], references: [id])
  playerId     Int
  winner       Player?  @relation("matchWinner", fields: [winnerId], references: [id])
  winnerId     Int?
  score        Score[] @relation()
}

model Player {
  id    Int     @id @default(autoincrement())
  name  String
  matchesPlayers Match[] @relation("matchPlayers")
  matchesWinner Match[] @relation("matchWinner")
  score Score[] @relation()
}

model Score {
  id    Int     @id @default(autoincrement())
  score Int
  match Match    @relation(fields: [matchId], references: [id])
  matchId Int
  player Player  @relation(fields: [playerId], references: [id])
  playerId Int
}

并且会生成如下数据库