菜单

关系

相关源文件

本文档解释了RealWorld应用程序中的数据关系。它描述了用户、文章、评论和标签等实体在数据库模式中如何相互关联,以及这些关系如何通过API暴露。

有关数据模型本身的信息,请参阅数据模型

实体关系概览

RealWorld应用程序实现了一个具有核心实体之间关系的社交博客平台。这些关系支持关注用户、喜欢文章和内容标签等功能。

来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96

数据库中的关系实现

RealWorld数据库模式通过外键和多对多关系中的连接表来实现关系。

来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96

用户关系

RealWorld应用程序中的用户拥有多种关键关系,构成了平台的社交特性。

用户关注关系

用户可以关注其他用户,从而在应用程序内创建社交网络。这实现为一个多对多的自引用关系。

在数据库模式中,这是通过_UserFollows连接表实现的。

此关系通过API暴露,途径如下:

  • POST /profiles/{username}/follow - 关注用户
  • DELETE /profiles/{username}/follow - 取消关注用户

来源

用户文章收藏

用户可以收藏他们喜欢的文章。这种多对多关系将用户与其收藏的文章联系起来。

在数据库模式中,这是通过_UserFavorites连接表实现的。

此关系通过API暴露,途径如下:

  • POST /articles/{slug}/favorite - 收藏一篇文章
  • DELETE /articles/{slug}/favorite - 取消收藏一篇文章

来源

文章关系

文章与用户(作者)、评论和标签有关联。

文章作者关系

每篇文章都由一个用户撰写,这构成了从用户到文章的一对多关系。

在数据库模式中,这是通过外键实现的。

当返回文章时,此关系会反映在API中,响应中会包含作者信息。

来源

文章标签

文章可以有多个标签,每个标签也可以与多篇文章关联,形成多对多关系。

在数据库模式中,这是通过_ArticleToTag连接表实现的。

文章可以通过API按标签进行过滤。

  • GET /articles?tag={tagName} - 获取带有特定标签的文章

来源

评论关系

评论与文章和用户(作者)都有关联。

评论作者和文章关联

每条评论都由一个用户撰写,并属于一篇文章,这构成了双重关系。

在数据库模式中,这是通过外键实现的。

这些关系通过API暴露,途径如下:

  • GET /articles/{slug}/comments - 获取一篇文章的评论
  • POST /articles/{slug}/comments - 为一篇文章创建评论
  • DELETE /articles/{slug}/comments/{id} - 删除文章的一条评论

来源

关系实现细节

级联删除

RealWorld数据库中的所有外键关系都配置为ON DELETE CASCADE,这意味着当父记录被删除时,所有相关的子记录也会被自动删除。

例如

  • 当用户被删除时,他们的所有文章、评论、收藏和关注关系都会被删除。
  • 当文章被删除时,它的所有评论和标签关联都会被删除。

来源:apps/api/prisma/migrations/20241009081140_init/migration.sql10-11 apps/api/prisma/migrations/20241009081140_init/migration.sql22-23 apps/api/prisma/migrations/20241009081140_init/migration.sql47-48 apps/api/prisma/migrations/20241009081140_init/migration.sql55-56 apps/api/prisma/migrations/20241009081140_init/migration.sql63-64

关系对API响应的影响

实体之间的关系会影响数据在API响应中的返回方式。例如,当检索一篇文章时:

  1. 文章的作者信息会被包含(来自用户-文章关系)
  2. 包含一个favorited布尔值(来自用户-文章收藏关系)
  3. 同样,包含一个favoritesCount(用户-文章收藏计数)

同样,对于用户资料:

  1. 包含一个following布尔值(来自用户-用户关注关系)

这种反规范化允许客户端在不进行额外API请求的情况下显示关系信息。

来源:api/openapi.yml497-535 api/openapi.yml481-497

总结

RealWorld数据库模式实现了丰富的关系集,支持关注用户、收藏文章和评论内容等社交功能。这些关系以一种允许客户端轻松访问相关数据的方式通过API暴露。

主要关系是:

  • 用户-用户:关注关系(多对多)
  • 用户-文章:作者关系(一对多)
  • 用户-文章:收藏关系(多对多)
  • 用户-评论:作者关系(一对多)
  • 文章-评论:包含关系(一对多)
  • 文章-标签:分类关系(多对多)

这些关系构成了RealWorld实现的社交博客平台的基础。