1

我在 Prisma 中有这种不那么简单的模型关系。用户 --< 注册 >-- 课程,我不知道如何确保课程标题字段在该用户创建的课程中是唯一的。换句话说,我不希望一个用户创建多个具有相同名称的课程。但我希望课程与不同的创作者同名。(只有创作者在注册中具有 TEACHER 角色)

我面临的问题是,我不知道在哪里定义唯一属性以及要包含哪些字段。我想对(课程名称,具有教师角色的成员)进行唯一约束的字段跨不同的模型。

model User {
  id                Int              @id @default(autoincrement())
  email             String           @unique
  passwordHash      String
  enrollments       Enrollment[]
}

model Course {
  id                Int              @id @default(autoincrement())
  name              String
  members           Enrollment[]
}

model Enrollment {
  role              UserRole         @default(STUDENT)

  // Relation Fields
  userId            Int
  courseId         Int
  user              User             @relation(fields: [userId], references: [id])
  course           Course          @relation(fields: [courseId], references: [id])
  @@id([userId, courseId])
  @@index([userId, role])
}
4

1 回答 1

4

您可能希望在Course模型上添加一个字段来定义创建它的人,以便您可以将该字段用作表本身的唯一约束。

model Course {
  id                Int              @id @default(autoincrement())
  name              String
  members           Enrollment[]
  creatorId         Int
  creator           User             @relation(fields: [creatorId], references: [id])
  @@unique([creatorId, name], name: "courseIdentifier")
}
于 2021-04-23T13:33:15.750 回答