问题描述
我是 prisma 和关系数据库的新手。我对如何在表之间创建多对多关系感到有些困惑,尤其是关系字段。
这是我想出的答案:
model User {
id String @id
comments Comment[]
posts Post[]
}
model Post {
id Int @default(autoincrement()) @id
author User @relation(fields: [authorId],references: [id])
authorId String
comments Comment[]
}
model Comment {
id Int @default(autoincrement()) @id
post Post @relation(fields: [postId],references: [id])
postId Int
author User @relation(fields: [authorId],references: [id])
authorId String
text String
}
Comment
表有两个指向 User
和 Post
表的外键。我是否需要在两个模型中都有 comments
字段?总的来说,我做得对吗?
解决方法
根据您发布的数据库模型,您的 Prisma 架构看起来非常好。让我一个关系一个关系。
User 和 Post 的一对多关系
这完全没问题。 Post 表应该包含 Order would immediately trigger.
字段的外键。
用户和帖子之间的多对多关系(通过评论关系表)。
这又一次,完全没问题。 User.id
字段需要出现在两个模型中也是正确的。
关于显式与隐式多对多关系的一些说明
在 Prisma 术语中,您明确定义多对多 comments
表的方式称为显式多对多关系。由于 Comment
表具有单独的 Comment
字段,因此使用显式多对多关系是有意义的。
如果 text
字段不存在,您可以使用隐式多对多关系。您可以选择在 Prisma 文档中 Relations Concept Article 的多对多关系部分阅读更多相关信息。
作为旁注,您的图表似乎将 text
外键错误地列为 authorId
类型。我相信这应该是 INT
。