Prisma:如何将具有多个 FK 的数据库表转换为 Prisma 模式? User 和 Post 的一对多关系用户和帖子之间的多对多关系通过评论关系表

问题描述

我是 prisma 和关系数据库的新手。我对如何在表之间创建多对多关系感到有些困惑,尤其是关系字段。

例如,假设我想将此数据库模型转换为 prisma 模式。

enter image description here

这是我想出的答案:

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 表有两个指向 UserPost 表的外键。我是否需要在两个模型中都有 comments 字段?总的来说,我做得对吗?

解决方法

根据您发布的数据库模型,您的 Prisma 架构看起来非常好。让我一个关系一个关系。

User 和 Post 的一对多关系

这完全没问题。 Post 表应该包含 Order would immediately trigger. 字段的外键。

用户和帖子之间的多对多关系(通过评论关系表)。

这又一次,完全没问题。 User.id 字段需要出现在两个模型中也是正确的。

关于显式与隐式多对多关系的一些说明

在 Prisma 术语中,您明确定义多对多 comments 表的方式称为显式多对多关系。由于 Comment 表具有单独的 Comment 字段,因此使用显式多对多关系是有意义的。

如果 text 字段不存在,您可以使用隐式多对多关系。您可以选择在 Prisma 文档中 Relations Concept Article 的多对多关系部分阅读更多相关信息。

作为旁注,您的图表似乎将 text 外键错误地列为 authorId 类型。我相信这应该是 INT