数据库:组织嵌套表的最有效方法有很多关系



我需要以下结构:项目--(has many)-->主题--(has many)-->文章

对于特定的项目,我想以最有效的方式查询文章

对于这种情况,最好的数据库架构是什么?我正在考虑以下选项:

  1. 经典的one-to-manyTopic.projectIdArticle.topicId的关系。在这里,我关心的是必须首先查询所有主题
  2. 项目--(has many)-->文章--(has one)-->主题(通过Article.projectId和Article.topicId(。如果我需要每个项目的主题列表,还可以添加Topic.projectId。通过这种方式,我直接查询Project的文章(而不是通过选项1中的主题(。我在这里关注的是Topic和Project的关系的重复:直接的,通过文章
  3. 你的选择

我使用的是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?
}

有了这个设置,你就可以获取:

  1. 与给定项目和相应主题相对应的所有文章
  2. 每个主题的文章
  3. 给定项目中的主题

最新更新