Prisma - 如何使用多个模型中的字段定义复合唯一约束?
Prisma - How to define compound unique constraint with fields in multiple models?
我在 Prisma 中有这种不那么直接的模型关系。 User --< Enrollment >-- Course 我不知道如何确保 Course title 字段在该用户创建的课程中是唯一的。换句话说,我不希望一个用户创建多个同名课程。但我希望课程与不同的创作者同名。 (只有创建者在注册中具有教师角色)
我面临的问题是,我不知道在哪里定义唯一属性以及要包含哪些字段。我要对其进行唯一约束的字段(课程名称,具有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])
}
您可能想在 Course
模型上添加一个字段来定义它的创建者,以便您可以将该字段用作 table 本身的唯一约束。
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")
}
我在 Prisma 中有这种不那么直接的模型关系。 User --< Enrollment >-- Course 我不知道如何确保 Course title 字段在该用户创建的课程中是唯一的。换句话说,我不希望一个用户创建多个同名课程。但我希望课程与不同的创作者同名。 (只有创建者在注册中具有教师角色)
我面临的问题是,我不知道在哪里定义唯一属性以及要包含哪些字段。我要对其进行唯一约束的字段(课程名称,具有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])
}
您可能想在 Course
模型上添加一个字段来定义它的创建者,以便您可以将该字段用作 table 本身的唯一约束。
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")
}