如何解决数据库:组织具有嵌套多关系的表的最有效方法
我需要以下结构:
项目 --(has many)-->
主题 --(has many)-->
文章
对于特定的项目,我想以最有效的方式查询文章。
这种情况下最好的数据库架构是什么?我正在考虑以下选项:
- 与
one-to-many
和Topic.projectId
的经典Article.topicId
关系。在这里,我担心必须先查询所有主题。 -
项目
--(has many)-->
文章--(has one)-->
主题(通过 Article.projectId 和 Article.topicId)。如果我需要每个项目的主题列表,还可以添加Topic.projectId
。这样我直接查询项目的文章(而不是通过选项 1 中的主题)。我担心的是 Topic 与 Project 的关系重复:直接和通过文章。 - 您的选择?
我使用的是 Prisma,所以它可能有它自己的最佳实践。
解决方法
根据您的访问模式,此模型是有意义的:
model Project {
id Int @id @default(autoincrement())
name String
topics Topic[]
articles Article[]
}
model Topic {
id Int @id @default(autoincrement())
project Project? @relation(fields: [projectId],references: [id])
articles Article[]
projectId Int?
}
model Article {
id Int @id @default(autoincrement())
project Project? @relation(fields: [projectId],references: [id])
topic Topic? @relation(fields: [topicId],references: [id])
projectId Int?
topicId Int?
}
通过此设置,您将能够获取:
- 与给定项目和相应主题相对应的所有文章
- 每个主题的文章
- 给定项目中存在的主题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。