prisma:如何将具有多个 FK 的数据库 table 转换为 prisma 模式?
prisma: How to convert a database table with more that one FK to prisma schema?
总的来说,我是 Prisma 和关系数据库的新手。我对如何在 table 之间创建多对多关系感到有点困惑,尤其是关系字段。
例如,假设我想将此数据库模型转换为 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
table 有两个指向 User
和 Post
table 的外键。我是否需要在两个模型中都有 comments
字段?总的来说,我做对了吗?
根据您发布的数据库模型,您的 Prisma Schema 似乎非常好。让我一个一个地去吧。
User 与 Post
之间的一对多关系
这很好。 Post table 应该包含 User.id
字段的外键。
User 和 Post 之间的多对多关系(通过 Comment 关系 table)。
这又是一次,非常好。 comments
字段需要在两个模型中也是正确的。
关于显式与隐式多对多关系的一些说明
在 Prisma 术语中,您显式定义多对多 Comment
table 的方式称为 explicit 多对多关系。由于 Comment
table 有一个单独的 text
字段,因此使用显式多对多关系是有意义的。
如果 text
字段不存在,您可以使用 隐式 多对多关系。您可以选择在 prisma 文档 Relations Concept Article 的多对多关系部分阅读更多相关信息。
附带说明,您的图表似乎将 authorId
外键错误地列为 INT
类型。我相信这应该是 TEXT
.
总的来说,我是 Prisma 和关系数据库的新手。我对如何在 table 之间创建多对多关系感到有点困惑,尤其是关系字段。
例如,假设我想将此数据库模型转换为 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
table 有两个指向 User
和 Post
table 的外键。我是否需要在两个模型中都有 comments
字段?总的来说,我做对了吗?
根据您发布的数据库模型,您的 Prisma Schema 似乎非常好。让我一个一个地去吧。
User 与 Post
之间的一对多关系这很好。 Post table 应该包含 User.id
字段的外键。
User 和 Post 之间的多对多关系(通过 Comment 关系 table)。
这又是一次,非常好。 comments
字段需要在两个模型中也是正确的。
关于显式与隐式多对多关系的一些说明
在 Prisma 术语中,您显式定义多对多 Comment
table 的方式称为 explicit 多对多关系。由于 Comment
table 有一个单独的 text
字段,因此使用显式多对多关系是有意义的。
如果 text
字段不存在,您可以使用 隐式 多对多关系。您可以选择在 prisma 文档 Relations Concept Article 的多对多关系部分阅读更多相关信息。
附带说明,您的图表似乎将 authorId
外键错误地列为 INT
类型。我相信这应该是 TEXT
.